<html>
<head>
  <title>FE000000</title>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
  <meta content="utf-8" http-equiv="encoding">
  <script src="js/tslib.js"></script>
  <script src="js/break_infinity.min.js"></script>
  <script src="js/ad-notations.min.js"></script>
  <script src="js/ad-notations.community.min.js"></script>
  <script src="js/complexity/complexities.js?time=%time%"></script>
  <script src="js/complexity/complexity-achievements.js?time=%time%"></script>
  <script src="js/complexity/complexity-autobuyers.js?time=%time%"></script>
  <script src="js/complexity/complexity-challenge.js?time=%time%"></script>
  <script src="js/complexity/complexity-generators.js?time=%time%"></script>
  <script src="js/complexity/complexity-max-all.js?time=%time%"></script>
  <script src="js/complexity/complexity-points.js?time=%time%"></script>
  <script src="js/complexity/complexity-prestige-layer.js?time=%time%"></script>
  <script src="js/complexity/complexity-stars.js?time=%time%"></script>
  <script src="js/eternity/eternities.js?time=%time%"></script>
  <script src="js/eternity/eternity-autobuyers.js?time=%time%"></script>
  <script src="js/eternity/eternity-challenge.js?time=%time%"></script>
  <script src="js/eternity/eternity-generators.js?time=%time%"></script>
  <script src="js/eternity/eternity-max-all.js?time=%time%"></script>
  <script src="js/eternity/eternity-milestones.js?time=%time%"></script>
  <script src="js/eternity/eternity-points.js?time=%time%"></script>
  <script src="js/eternity/eternity-prestige-layer.js?time=%time%"></script>
  <script src="js/eternity/eternity-producer.js?time=%time%"></script>
  <script src="js/eternity/eternity-stars.js?time=%time%"></script>
  <script src="js/eternity/eternity-starting-benefits.js?time=%time%"></script>
  <script src="js/eternity/eternity-upgrades.js?time=%time%"></script>
  <script src="js/eternity/permanence-upgrades.js?time=%time%"></script>
  <script src="js/eternity/permanence.js?time=%time%"></script>
  <script src="js/finality/finalities.js?time=%time%"></script>
  <script src="js/finality/finality-generators.js?time=%time%"></script>
  <script src="js/finality/finality-max-all.js?time=%time%"></script>
  <script src="js/finality/finality-milestones.js?time=%time%"></script>
  <script src="js/finality/finality-points.js?time=%time%"></script>
  <script src="js/finality/finality-prestige-layer.js?time=%time%"></script>
  <script src="js/finality/finality-shards.js?time=%time%"></script>
  <script src="js/finality/finality-stars.js?time=%time%"></script>
  <script src="js/finality/finality-starting-benefits.js?time=%time%"></script>
  <script src="js/infinity/infinities.js?time=%time%"></script>
  <script src="js/infinity/infinity-autobuyers.js?time=%time%"></script>
  <script src="js/infinity/infinity-challenge.js?time=%time%"></script>
  <script src="js/infinity/infinity-generators.js?time=%time%"></script>
  <script src="js/infinity/infinity-max-all.js?time=%time%"></script>
  <script src="js/infinity/infinity-points.js?time=%time%"></script>
  <script src="js/infinity/infinity-prestige-layer.js?time=%time%"></script>
  <script src="js/infinity/infinity-stars.js?time=%time%"></script>
  <script src="js/infinity/infinity-upgrades.js?time=%time%"></script>
  <script src="js/rng.js?time=%time%"></script>
  <script src="js/autobuyers.js?time=%time%"></script>
  <script src="js/boost.js?time=%time%"></script>
  <script src="js/challenge-header-text.js?time=%time%"></script>
  <script src="js/challenge.js?time=%time%"></script>
  <script src="js/chroma.js?time=%time%"></script>
  <script src="js/colors.js?time=%time%"></script>
  <script src="js/coordinate.js?time=%time%"></script>
  <script src="js/fit-to-width.js?time=%time%"></script>
  <script src="js/format.js?time=%time%"></script>
  <script src="js/galaxy.js?time=%time%"></script>
  <script src="js/generators.js?time=%time%"></script>
  <script src="js/goals.js?time=%time%"></script>
  <script src="js/hotkeys.js?time=%time%"></script>
  <script src="js/loop.js?time=%time%"></script>
  <script src="js/main.js?time=%time%"></script>
  <script src="js/max-all.js?time=%time%"></script>
  <script src="js/multiverse-collapse.js?time=%time%"></script>
  <script src="js/options.js?time=%time%"></script>
  <script src="js/oracle.js?time=%time%"></script>
  <script src="js/player.js?time=%time%"></script>
  <script src="js/power-shards.js?time=%time%"></script>
  <script src="js/powers.js?time=%time%"></script>
  <script src="js/prestige-layer-names.js?time=%time%"></script>
  <script src="js/prestige-layer-progress.js?time=%time%"></script>
  <script src="js/prestige.js?time=%time%"></script>
  <script src="js/sacrifice.js?time=%time%"></script>
  <script src="js/safe-minus.js?time=%time%"></script>
  <script src="js/safe-pow.js?time=%time%"></script>
  <script src="js/saving.js?time=%time%"></script>
  <script src="js/stars.js?time=%time%"></script>
  <script src="js/stats.js?time=%time%"></script>
  <script src="js/studies.js?time=%time%"></script>
  <script src="js/tabs.js?time=%time%"></script>
  <script src="js/trivia.js?time=%time%"></script>
  <script src="js/update-display.js?time=%time%"></script>
  <link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
  <link rel="stylesheet" href="styles.css?time=%time%"></link>
</head>
<body>
  <div id="loading">
    <span>The game is loading; this message should only appear for a few seconds.</span>
    <br/>
    <span>If it shows up for a longer time, that's probably a bug and you should use the buttons below.</span>
    <br/>
    <span>Reloading might work, so probably try that first.</span>
    <br/>
    <span>The page loads <span id="script-count"></span> scripts (should be 81).</span>
    <br/>
    <span><button onclick="window.location.reload(true)">Reload window</button> <button class="export-button" onclick="Saving.exportGame(0)">Export</button> <button onclick="Saving.loadGamePrompt()">Load</button> <button onclick="Saving.resetGameWithConfirmation()">RESET THE GAME</button></span>
  </div>
  <div id="simulatetime" style="display: none;">
    <span>Time spent simulating ticks: <span id="timesimulated"></span></span>
    <br/>
    <span>Ticks simulated so far: <span id="tickssimulated"></span>/<span id="totaltickssimulated"></span></span>
    <br/>
    <span>Time to finish: <span id="expectedtotaltimesimulated"></span> total, <span id="expectedremainingtimesimulated"></span> remaining</span>
    <div id="progress">
      <div id="bar"></div>
    </div>
  </div>
  <div id="main" style="display: none;">
    <div style="height: 32px;">You have ~f Stars.amount() ~ stars.<span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~> ~r ChallengeHeaderText.getText() ~</span></div>
    <div style="height: 56px;" ~style.display=SpecialDivs.isDivVisible('infinity') ? '' : 'none'~>
      <span ~style.display=InfinityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>You need ~f InfinityPrestigeLayer.starRequirementForInfinity() ~ stars to infinity.</span>
      <br ~style.display=InfinityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~/>
      <span ~style.display=InfinityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i InfinityPrestigeLayer.infinityPoints() ~ infinity point~s InfinityPrestigeLayer.infinityPoints() ~ (~i InfinityPrestigeLayer.totalInfinityPoints() ~ total this eternity)</span>
      <button ~style.display=InfinityPrestigeLayer.canInfinity() ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.resetColors(), 'infinity')~ style="height: 48px;" onclick="InfinityPrestigeLayer.infinity(true)">Infinity: Gain ~i InfinityPrestigeLayer.infinityPointGain() ~ infinity point~s InfinityPrestigeLayer.infinityPointGain() ~ (~r InfinityPrestigeLayer.infinityPointGainRatioText() ~~i InfinityPrestigeLayer.infinityPoints() ~ → ~i InfinityPrestigeLayer.newInfinityPoints() ~~r InfinityPrestigeLayer.infinityPointNextText() ~)<br/>~f InfinityPrestigeLayer.currentIPPerSec() ~ IP/sec, ~f InfinityPrestigeLayer.peakIPPerSec() ~ peak IP/sec</button>
    </div>
    <div style="height: 56px;" ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>
      <span ~style.display=EternityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>You need ~f EternityPrestigeLayer.infinityPointRequirementForEternity() ~ total infinity points to eternity.</span>
      <br ~style.display=EternityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~/>
      <span ~style.display=EternityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i EternityPrestigeLayer.eternityPoints() ~ eternity point~s EternityPrestigeLayer.eternityPoints() ~ (~i EternityPrestigeLayer.totalEternityPoints() ~ total this complexity)</span>
      <button ~style.display=EternityPrestigeLayer.canEternity() ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.resetColors(), 'eternity')~ style="height: 48px;" onclick="EternityPrestigeLayer.eternity(true)">Eternity: Gain ~i EternityPrestigeLayer.eternityPointGain() ~ eternity point~s EternityPrestigeLayer.eternityPointGain() ~ (~r EternityPrestigeLayer.eternityPointGainRatioText() ~~i EternityPrestigeLayer.eternityPoints() ~ → ~i EternityPrestigeLayer.newEternityPoints() ~~r EternityPrestigeLayer.eternityPointNextText() ~)<br/>~f EternityPrestigeLayer.currentEPPerSec() ~ EP/sec, ~f EternityPrestigeLayer.peakEPPerSec() ~ peak EP/sec<span ~style.display=EternityChallenge.displayTiersCompletedOnEternity() ? '' : 'none'~>, +~i EternityChallenge.tiersCompletedOnEternity() ~ EC tier~s EternityChallenge.tiersCompletedOnEternity() ~ (~i EternityChallenge.getEternityChallengeCompletions() ~ → ~i EternityChallenge.getNextEternityChallengeCompletions() ~~r EternityChallenge.eternityChallengeCompletionsNextText() ~)</span></button>
    </div>
    <div style="height: 56px;" ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>
      <span ~style.display=ComplexityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>You need ~r ComplexityPrestigeLayer.requirementForComplexity() ~ to complexity.</span>
      <br ~style.display=ComplexityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~/>
      <span ~style.display=ComplexityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i ComplexityPrestigeLayer.complexityPoints() ~ complexity point~s ComplexityPrestigeLayer.complexityPoints() ~ (~i ComplexityPrestigeLayer.totalComplexityPoints() ~ total this finality)</span>
      <button ~style.display=ComplexityPrestigeLayer.canComplexity() ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.resetColors(), 'complexity')~ style="height: 48px;" onclick="ComplexityPrestigeLayer.complexity(true)">Complexity: Gain ~i ComplexityPrestigeLayer.complexityPointGain() ~ complexity point~s ComplexityPrestigeLayer.complexityPointGain() ~ (~r ComplexityPrestigeLayer.complexityPointGainRatioText() ~~i ComplexityPrestigeLayer.complexityPoints() ~ → ~i ComplexityPrestigeLayer.newComplexityPoints() ~~r ComplexityPrestigeLayer.complexityPointNextText() ~)<br/>~f ComplexityPrestigeLayer.currentCPPerSec() ~ ℂP/sec, ~f ComplexityPrestigeLayer.peakCPPerSec() ~ peak ℂP/sec</button>
    </div>
    <div style="height: 56px;" ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>
      <span ~style.display=FinalityPrestigeLayer.isRequirementVisible() ? '' : 'none'~>You need ~f FinalityPrestigeLayer.complexityPointRequirementForFinality() ~ total complexity points to finality.</span>
      <br ~style.display=FinalityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~/>
      <span ~style.display=FinalityPrestigeLayer.isAmountSpanVisible() ? '' : 'none'~>You have ~i FinalityPrestigeLayer.finalityPoints() ~ finality point~s FinalityPrestigeLayer.finalityPoints() ~ (~i FinalityPrestigeLayer.totalFinalityPoints() ~ total)</span>
      <button ~style.display=FinalityPrestigeLayer.canFinality() ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.resetColors(), 'finality')~ style="height: 48px;" onclick="FinalityPrestigeLayer.finality(true)">Finality: Gain ~i FinalityPrestigeLayer.finalityPointGain() ~ finality point~s FinalityPrestigeLayer.finalityPointGain() ~ (~r FinalityPrestigeLayer.finalityPointGainRatioText() ~~i FinalityPrestigeLayer.finalityPoints() ~ → ~i FinalityPrestigeLayer.newFinalityPoints() ~)<br/>and ~i FinalityPrestigeLayer.finalityShardGain() ~ finality shard~s FinalityPrestigeLayer.finalityShardGain() ~ (~r FinalityPrestigeLayer.finalityShardGainRatioText() ~~i FinalityPrestigeLayer.finalityShards() ~ → ~i FinalityPrestigeLayer.newFinalityShards() ~)</button>
    </div>
    <div style="height: 32px;" ~style.display=Goals.areAllGoalsCompleted() ? '' : 'none'~>You have won the game! Congratulations!</div>
    <br/>
    <br/>
    <span ~style.display=Tabs.displayTabRow(1) ? '' : 'none'~>
      <button ~style.display=Tabs.isTabVisible('main') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'normal')~ onclick="Tabs.setTab('main')">Main</button>
      <button ~style.display=Tabs.isTabVisible('infinity') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'infinity')~ onclick="Tabs.setTab('infinity')">Infinity</button>
      <button ~style.display=Tabs.isTabVisible('challenges') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'infinity')~ onclick="Tabs.setTab('challenges')">Challenges</button>
      <button ~style.display=Tabs.isTabVisible('autobuyers') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'normal')~ onclick="Tabs.setTab('autobuyers')">Autobuyers</button>
      <button ~style.display=Tabs.isTabVisible('infinity-challenges') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'infinity')~ onclick="Tabs.setTab('infinity-challenges')">Infinity Challenges</button>
      <button ~style.display=Tabs.isTabVisible('goals') ? '' : 'none'~ onclick="Tabs.setTab('goals')">Goals</button>
      <button ~style.display=Tabs.isTabVisible('statistics') ? '' : 'none'~ onclick="Tabs.setTab('statistics')">Statistics</button>
      <button ~style.display=Tabs.isTabVisible('last-ten-runs') ? '' : 'none'~ onclick="Tabs.setTab('last-ten-runs')">Last Ten Runs</button>
      <button ~style.display=Tabs.isTabVisible('options') ? '' : 'none'~ onclick="Tabs.setTab('options')">Options</button>
    </span>
    <br ~style.display=Tabs.displayTabBreak(1) ? '' : 'none'~/>
    <span ~style.display=Tabs.displayTabRow(2) ? '' : 'none'~>
      <button ~style.display=Tabs.isTabVisible('eternity') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'eternity')~ onclick="Tabs.setTab('eternity')">Eternity</button>
      <button ~style.display=Tabs.isTabVisible('eternity-milestones') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'eternity')~ onclick="Tabs.setTab('eternity-milestones')">Eternity Milestones</button>
      <button ~style.display=Tabs.isTabVisible('studies') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'studies')~ onclick="Tabs.setTab('studies')">Studies</button>
      <button ~style.display=Tabs.isTabVisible('eternity-producer') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'eternity-producer')~ onclick="Tabs.setTab('eternity-producer')">Eternity Producer</button>
      <button ~style.display=Tabs.isTabVisible('eternity-challenges') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'eternity')~ onclick="Tabs.setTab('eternity-challenges')">Eternity Challenges</button>
      <button ~style.display=Tabs.isTabVisible('chroma') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'chroma')~ onclick="Tabs.setTab('chroma')">Chroma</button>
    </span>
    <br ~style.display=Tabs.displayTabBreak(2) ? '' : 'none'~/>
    <span ~style.display=Tabs.displayTabRow(3) ? '' : 'none'~>
      <button ~style.display=Tabs.isTabVisible('complexity') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'complexity')~ onclick="Tabs.setTab('complexity')">Complexity</button>
      <button ~style.display=Tabs.isTabVisible('complexity-challenges') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'complexity')~ onclick="Tabs.setTab('complexity-challenges')">Complexity Challenges</button>
      <button ~style.display=Tabs.isTabVisible('complexity-achievements') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'complexity')~ onclick="Tabs.setTab('complexity-achievements')">Complexity Achievements</button>
      <button ~style.display=Tabs.isTabVisible('powers') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), Powers.tabColors())~ onclick="Tabs.setTab('powers')">Powers</button>
      <button ~style.display=Tabs.isTabVisible('oracle') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'complexity')~ onclick="Tabs.setTab('oracle')">Oracle</button>
      <button ~style.display=Tabs.isTabVisible('galaxies') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), Galaxy.tabColors())~ onclick="Tabs.setTab('galaxies')">Galaxies</button>
    </span>
    <br ~style.display=Tabs.displayTabBreak(3) ? '' : 'none'~/>
    <span ~style.display=Tabs.displayTabRow(4) ? '' : 'none'~>
      <button ~style.display=Tabs.isTabVisible('finality') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'finality')~ onclick="Tabs.setTab('finality')">Finality</button>
      <button ~style.display=Tabs.isTabVisible('finality-shards') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'finality')~ onclick="Tabs.setTab('finality-shards')">Finality Shards</button>
      <button ~style.display=Tabs.isTabVisible('finality-milestones') ? '' : 'none'~ ~style.background=Colors.getButtonColor(Options.tabColors(), 'finality')~ onclick="Tabs.setTab('finality-milestones')">Finality Milestones</button>
    </span>
    <div ~style.display=ComplexityChallenge.anyLongTime() ? '' : 'none'~ class="reddiv">
      <span>You have been in ~r ComplexityChallenge.longTimeText() ~ for a long time.</span>
      <br/>
      <span>This message is here in case you accidentally disabled something and forgot to enable it again. <button onclick="ComplexityChallenge.removeLongTimeMessage()">Remove this message</button></span>
    </div>
    <br/>
    <br/>
    <tab ~style.display=Tabs.currentTab() === 'main' ? '' : 'none'~>
      <div ~style.display=Stars.atLimit() ? 'none' : ''~>
        <span>You have ~f Stars.amount() ~ stars. You are getting ~f Stars.perSecond() ~ stars per second. <button ~class=MaxAll.anythingToBuy() ? "" : "disabled"~ onclick="MaxAll.maxAll()">Max all</button></span>
        <br/>
        <div ~style.display=Challenge.isThereChallengeText() ? '' : 'none'~>
          <span>~r Challenge.challengeText() ~</span>
        </div>
        <div ~style.display=EternityChallenge.isThereEternityChallengeText() ? '' : 'none'~>
          <span>~r EternityChallenge.eternityChallengeText() ~</span>
        </div>
        <div ~style.display=Boost.isVisible() ? '' : 'none'~>
          <span>You have ~i Boost.bought() ~ boost~s Boost.bought() ~, multiplying all ~r Generators.term() ~ by ~f Boost.multiplier() ~x (~f Boost.multiplierPer() ~x each). <button ~class=Boost.canBuy() ? "" : "disabled"~ onclick="Boost.buy()">Cost: ~f Boost.cost() ~</button> <button ~class=Boost.canBuy() ? "" : "disabled"~ onclick="Boost.buyMax()">Max</button></span>
        </div>
        <div ~style.display=SpecialDivs.isDivVisible('boost-power') ? '' : 'none'~>
          <span>Your highest number of boosts this eternity is ~i Boost.highestBoughtThisEternity() ~.</span>
          <br/>
          <div ~style.display=Boost.isBoostPowerVisible() ? '' : 'none'~>
            <span>You have ~f Boost.boostPower() ~ boost power, increasing the per-boost multiplier by ~f Boost.boostPowerEffect() ~x.</span>
            <br/>
            <span>You are generating ~r formatWithPrecision(Boost.boostPowerPerSecond(), 5) ~ boost power per second (~r formatWithPrecision(Boost.boostPowerPerBoost(), 5) ~ per boost this eternity above ~i Boost.boostPowerStart() ~).</span>
          </div>
          <span ~style.display=Boost.isBoostPowerVisible() ? 'none' : ''~>You will start generating boost power for each boost this eternity above ~i Boost.boostPowerStart() ~ boosts.</span>
        </div>
        <div ~style.display=Boost.isBestBoostPowerVisible() ? '' : 'none'~>
          <span>Your ~r Boost.bestBoostPowerDescription() ~ is ~f Boost.bestBoostPower() ~ (giving ~i Boost.extraTheoremsActualAndDisplay() ~ extra theorem~s Boost.extraTheoremsActualAndDisplay() ~, next at ~f Boost.nextExtraTheorem() ~).</span>
        </div>
        <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>View all ~r Generators.term() ~ even if they would be otherwise invisible: <input type="checkbox" ~!checked=Generators.viewAll()~ ~!onchange=function() {Generators.setViewAll(this.checked)}~></input></span> 
        <br/>
        <br/>
        <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
          <tr ~style.display=Generator(1).isVisible() ? '' : 'none'~>
            <td>Generator 1</td>
            <td>~f Generator(1).amount() ~</td>
            <td>~f Generator(1).perSecond() ~/s</td>
            <td>~f Generator(1).multiplier() ~x</td>
            <td><button ~class=Generator(1).canBuy() ? "" : "disabled"~ onclick="Generator(1).buy()">Cost: ~i Generator(1).cost() ~</button></td>
            <td><button ~class=Generator(1).canBuy() ? "" : "disabled"~ onclick="Generator(1).buyMax()">Max</button></td>
          </tr>
          <tr ~style.display=Generator(2).isVisible() ? '' : 'none'~>
            <td>Generator 2</td>
            <td>~f Generator(2).amount() ~</td>
            <td>~f Generator(2).perSecond() ~/s</td>
            <td>~f Generator(2).multiplier() ~x</td>
            <td><button ~class=Generator(2).canBuy() ? "" : "disabled"~ onclick="Generator(2).buy()">Cost: ~i Generator(2).cost() ~</button></td>
            <td><button ~class=Generator(2).canBuy() ? "" : "disabled"~ onclick="Generator(2).buyMax()">Max</button></td>
          </tr>
          <tr ~style.display=Generator(3).isVisible() ? '' : 'none'~>
            <td>Generator 3</td>
            <td>~f Generator(3).amount() ~</td>
            <td>~f Generator(3).perSecond() ~/s</td>
            <td>~f Generator(3).multiplier() ~x</td>
            <td><button ~class=Generator(3).canBuy() ? "" : "disabled"~ onclick="Generator(3).buy()">Cost: ~i Generator(3).cost() ~</button></td>
            <td><button ~class=Generator(3).canBuy() ? "" : "disabled"~ onclick="Generator(3).buyMax()">Max</button></td>
          </tr>
          <tr ~style.display=Generator(4).isVisible() ? '' : 'none'~>
            <td>Generator 4</td>
            <td>~f Generator(4).amount() ~</td>
            <td>~f Generator(4).perSecond() ~/s</td>
            <td>~f Generator(4).multiplier() ~x</td>
            <td><button ~class=Generator(4).canBuy() ? "" : "disabled"~ onclick="Generator(4).buy()">Cost: ~i Generator(4).cost() ~</button></td>
            <td><button ~class=Generator(4).canBuy() ? "" : "disabled"~ onclick="Generator(4).buyMax()">Max</button></td>
          </tr>
          <tr ~style.display=Generator(5).isVisible() ? '' : 'none'~>
            <td>Generator 5</td>
            <td>~f Generator(5).amount() ~</td>
            <td>~f Generator(5).perSecond() ~/s</td>
            <td>~f Generator(5).multiplier() ~x</td>
            <td><button ~class=Generator(5).canBuy() ? "" : "disabled"~ onclick="Generator(5).buy()">Cost: ~i Generator(5).cost() ~</button></td>
            <td><button ~class=Generator(5).canBuy() ? "" : "disabled"~ onclick="Generator(5).buyMax()">Max</button></td>
          </tr>
          <tr ~style.display=Generator(6).isVisible() ? '' : 'none'~>
            <td>Generator 6</td>
            <td>~f Generator(6).amount() ~</td>
            <td>~f Generator(6).perSecond() ~/s</td>
            <td>~f Generator(6).multiplier() ~x</td>
            <td><button ~class=Generator(6).canBuy() ? "" : "disabled"~ onclick="Generator(6).buy()">Cost: ~i Generator(6).cost() ~</button></td>
            <td><button ~class=Generator(6).canBuy() ? "" : "disabled"~ onclick="Generator(6).buyMax()">Max</button></td>
          </tr>
          <tr ~style.display=Generator(7).isVisible() ? '' : 'none'~>
            <td>Generator 7</td>
            <td>~f Generator(7).amount() ~</td>
            <td>~f Generator(7).perSecond() ~/s</td>
            <td>~f Generator(7).multiplier() ~x</td>
            <td><button ~class=Generator(7).canBuy() ? "" : "disabled"~ onclick="Generator(7).buy()">Cost: ~i Generator(7).cost() ~</button></td>
            <td><button ~class=Generator(7).canBuy() ? "" : "disabled"~ onclick="Generator(7).buyMax()">Max</button></td>
          </tr>
          <tr ~style.display=Generator(8).isVisible() ? '' : 'none'~>
            <td>Generator 8</td>
            <td>~f Generator(8).amount() ~</td>
            <td>~f Generator(8).perSecond() ~/s</td>
            <td>~f Generator(8).multiplier() ~x</td>
            <td><button ~class=Generator(8).canBuy() ? "" : "disabled"~ onclick="Generator(8).buy()">Cost: ~i Generator(8).cost() ~</button></td>
            <td><button ~class=Generator(8).canBuy() ? "" : "disabled"~ onclick="Generator(8).buyMax()">Max</button></td>
          </tr>
        </table>
        <div ~style.display=Sacrifice.isVisible() ? '' : 'none'~>
          <br/>
          <span>You have a ~f Sacrifice.sacrificeMultiplier() ~ sacrifice multiplier multiplying Generator 8 by its amount.</span>
          <br/>
          <span ~style.display=Sacrifice.canSacrifice() ? '' : 'none'~><button style="height: 48px;" onclick="Sacrifice.sacrifice(true)">Sacrifice: ~f Sacrifice.sacrificeMultiplier() ~ → ~f Sacrifice.newSacrificeMultiplier() ~<br/>(+~f Sacrifice.sacrificeMultiplierGain() ~, ~f Sacrifice.sacrificeMultiplierMultGain() ~x)</button></span>
          <span ~style.display=Sacrifice.canSacrifice() ? 'none' : ''~>You need ~r Sacrifice.sacrificeRequirementText() ~ to sacrifice.</span>
        </div>
        <div ~style.display=Prestige.isVisible() ? '' : 'none'~>
          <br/>
          <span>You have ~f Prestige.prestigePower() ~ prestige power multiplying all ~r Generators.term() ~ by its amount.</span>
          <br/>
          <span ~style.display=Prestige.canPrestige() ? '' : 'none'~><button style="height: 48px;" onclick="Prestige.prestige(true)">Prestige: ~f Prestige.prestigePower() ~ → ~f Prestige.newPrestigePower() ~<br/>(+~f Prestige.prestigePowerGain() ~, ~f Prestige.prestigePowerMultGain() ~x)</button></span>
          <span ~style.display=Prestige.canPrestige() ? 'none' : ''~>You need ~f Prestige.prestigeRequirement() ~ stars to prestige.</span>
        </div>
        <br ~style.display=SpecialDivs.isDivVisible('softcap') ? '' : 'none'~/>
        <span ~style.display=SpecialDivs.isDivVisible('softcap') ? '' : 'none'~>~r Generators.term(true, true) ~ multipliers are reduced above ~f Generators.nerfValue() ~x (the multiplier softcap).</span>
        <br ~style.display=Generators.areAnyMultipliersNerfed() ? '' : 'none'~/>
        <div ~style.display=Generators.areAnyMultipliersNerfed() ? '' : 'none'~>
          Given a multiplier x, let y be log(x, ~f Generators.nerfValue() ~). x is reduced to ~f Generators.nerfValue() ~^(y^(y^~r formatWithPrecision(Generators.nerfExponent, 5) ~)).
        </div>
        <br ~style.display=SpecialDivs.isDivVisible('hardcap') ? '' : 'none'~/>
        <span ~style.display=SpecialDivs.isDivVisible('hardcap') ? '' : 'none'~>It is impossible to get more than ~f MultiverseCollapse.stars() ~ stars.</span>
      </div>
      <div ~style.display=Stars.atLimit() ? '' : 'none'~>
        <span>The ~r Stars.collapsedText() ~ collapsed due to an excess of stars.</span>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'infinity' ? '' : 'none'~>
      <span>You have ~i InfinityPoints.amount() ~ infinity point~s InfinityPoints.amount() ~ (IP).
        <button ~class=InfinityMaxAll.anythingToBuy() ? "" : "disabled"~ onclick="InfinityMaxAll.maxAll()">Max all</button>
        <button ~class=InfinityMaxAll.anyUpgradesToBuy() ? "" : "disabled"~ onclick="InfinityMaxAll.maxUpgrades()">Max upgrades</button>
        <button ~class=InfinityMaxAll.anyGeneratorsToBuy() ? "" : "disabled"~ onclick="InfinityMaxAll.maxGenerators()">Max generators</button>
      </span>
      <br/>
      <span>You have produced ~i InfinityPoints.totalIPProducedThisEternity() ~ infinity point~s InfinityPoints.totalIPProducedThisEternity() ~ this eternity, multiplying all ~r Generators.term() ~ by ~f InfinityPoints.multiplier() ~.</span>
      <br/>
      <span>You have ~i Infinities.amount() ~ infinit~y Infinities.amount() ~, multiplying all infinity generators (IGs) by ~q Infinities.infinityGeneratorMultiplier() ~.</span>
      <br/>
      <span ~style.display=InfinityPrestigeLayer.canInfinityBeBroken() ? '' : 'none'~><button style="height: 48px;" onclick="InfinityPrestigeLayer.toggleBreakInfinity()">~r InfinityPrestigeLayer.breakInfinityButtonText() ~</button></span>
      <span ~style.display=InfinityPrestigeLayer.canInfinityBeBroken() ? 'none' : ''~>You need to complete all the challenges to be able to break infinity.</span>
      <br ~style.display=(InfinityPrestigeLayer.canInfinityBeBroken() && !SpecialTabs.isTabVisible('infinity-challenges')) ? '' : 'none'~/>
      <span ~style.display=(InfinityPrestigeLayer.canInfinityBeBroken() && !SpecialTabs.isTabVisible('infinity-challenges')) ? '' : 'none'~>Breaking infinity for the first time will also let you view the Infinity Challenges tab.</span>
      <br/>
      <span>You have ~f InfinityStars.amount() ~ infinity stars, multiplying all ~r Generators.term() ~ by their amount^~f InfinityStars.exponent() ~ = ~f InfinityStars.multiplier() ~.</span>
      <br/>
      <span>You are getting ~f InfinityStars.perSecond() ~ infinity stars per second.</span>
      <br/>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <th colspan="5">Infinity Upgrades:</th>
        <tr>
          <td>Increase the base multiplier per boost:</td>
          <td><span ~style.display=InfinityUpgrade(1).atBoughtLimit() ? 'none' : ''~>~f InfinityUpgrade(1).effect() ~ → ~f InfinityUpgrade(1).nextEffect() ~</span><span ~style.display=InfinityUpgrade(1).atBoughtLimit() ? '' : 'none'~>~f InfinityUpgrade(1).effect() ~ (maxed)</span></td>
          <td><span ~style.display=InfinityUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=InfinityUpgrade(1).canBuy() ? "" : "disabled"~ onclick="InfinityUpgrade(1).buy()">Cost: ~i InfinityUpgrade(1).cost() ~ IP</button></span></td>
          <td><span ~style.display=InfinityUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=InfinityUpgrade(1).canBuy() ? "" : "disabled"~ onclick="InfinityUpgrade(1).buyMax()">Max</button></span></td>
          <td><span ~style.display=InfinityAutobuyer(9).hasInfinityAutobuyer() ? '' : 'none'~><button onclick="InfinityAutobuyer(9).toggle()">Auto: ~r InfinityAutobuyer(9).isOn() ? "On" : "Off" ~</button></span></td>
        </tr>
        <tr>
          <td>Increase the power of infinity stars:</td>
          <td><span ~style.display=InfinityUpgrade(2).atBoughtLimit() ? 'none' : ''~>~f InfinityUpgrade(2).effect() ~ → ~f InfinityUpgrade(2).nextEffect() ~</span><span ~style.display=InfinityUpgrade(2).atBoughtLimit() ? '' : 'none'~>~f InfinityUpgrade(2).effect() ~ (maxed)</span></td>
          <td><span ~style.display=InfinityUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=InfinityUpgrade(2).canBuy() ? "" : "disabled"~ onclick="InfinityUpgrade(2).buy()">Cost: ~i InfinityUpgrade(2).cost() ~ IP</button></span></td>
          <td><span ~style.display=InfinityUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=InfinityUpgrade(2).canBuy() ? "" : "disabled"~ onclick="InfinityUpgrade(2).buyMax()">Max</button></span></td>
          <td><span ~style.display=InfinityAutobuyer(10).hasInfinityAutobuyer() ? '' : 'none'~><button onclick="InfinityAutobuyer(10).toggle()">Auto: ~r InfinityAutobuyer(10).isOn() ? "On" : "Off" ~</button></span></td>
        </tr>
      </table>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr ~style.display=InfinityGenerator(1).isVisible() ? '' : 'none'~>
          <td>Infinity Generator 1</td>
          <td>~f InfinityGenerator(1).amount() ~</td>
          <td>~f InfinityGenerator(1).perSecond() ~/s</td>
          <td>~f InfinityGenerator(1).multiplier() ~x</td>
          <td><button ~class=InfinityGenerator(1).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(1).buy()">Cost: ~i InfinityGenerator(1).cost() ~ IP</button></td>
          <td><button ~class=InfinityGenerator(1).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(1).buyMax()">Max</button></td>
          <td><button ~style.display=InfinityAutobuyer(1).hasInfinityAutobuyer() ? '' : 'none'~ onclick="InfinityAutobuyer(1).toggle()">Auto: ~r InfinityAutobuyer(1).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=InfinityGenerator(2).isVisible() ? '' : 'none'~>
          <td>Infinity Generator 2</td>
          <td>~f InfinityGenerator(2).amount() ~</td>
          <td>~f InfinityGenerator(2).perSecond() ~/s</td>
          <td>~f InfinityGenerator(2).multiplier() ~x</td>
          <td><button ~class=InfinityGenerator(2).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(2).buy()">Cost: ~i InfinityGenerator(2).cost() ~ IP</button></td>
          <td><button ~class=InfinityGenerator(2).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(2).buyMax()">Max</button></td>
          <td><button ~style.display=InfinityAutobuyer(2).hasInfinityAutobuyer() ? '' : 'none'~ onclick="InfinityAutobuyer(2).toggle()">Auto: ~r InfinityAutobuyer(2).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=InfinityGenerator(3).isVisible() ? '' : 'none'~>
          <td>Infinity Generator 3</td>
          <td>~f InfinityGenerator(3).amount() ~</td>
          <td>~f InfinityGenerator(3).perSecond() ~/s</td>
          <td>~f InfinityGenerator(3).multiplier() ~x</td>
          <td><button ~class=InfinityGenerator(3).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(3).buy()">Cost: ~i InfinityGenerator(3).cost() ~ IP</button></td>
          <td><button ~class=InfinityGenerator(3).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(3).buyMax()">Max</button></td>
          <td><button ~style.display=InfinityAutobuyer(3).hasInfinityAutobuyer() ? '' : 'none'~ onclick="InfinityAutobuyer(3).toggle()">Auto: ~r InfinityAutobuyer(3).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=InfinityGenerator(4).isVisible() ? '' : 'none'~>
          <td>Infinity Generator 4</td>
          <td>~f InfinityGenerator(4).amount() ~</td>
          <td>~f InfinityGenerator(4).perSecond() ~/s</td>
          <td>~f InfinityGenerator(4).multiplier() ~x</td>
          <td><button ~class=InfinityGenerator(4).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(4).buy()">Cost: ~i InfinityGenerator(4).cost() ~ IP</button></td>
          <td><button ~class=InfinityGenerator(4).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(4).buyMax()">Max</button></td>
          <td><button ~style.display=InfinityAutobuyer(4).hasInfinityAutobuyer() ? '' : 'none'~ onclick="InfinityAutobuyer(4).toggle()">Auto: ~r InfinityAutobuyer(4).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=InfinityGenerator(5).isVisible() ? '' : 'none'~>
          <td>Infinity Generator 5</td>
          <td>~f InfinityGenerator(5).amount() ~</td>
          <td>~f InfinityGenerator(5).perSecond() ~/s</td>
          <td>~f InfinityGenerator(5).multiplier() ~x</td>
          <td><button ~class=InfinityGenerator(5).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(5).buy()">Cost: ~i InfinityGenerator(5).cost() ~ IP</button></td>
          <td><button ~class=InfinityGenerator(5).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(5).buyMax()">Max</button></td>
          <td><button ~style.display=InfinityAutobuyer(5).hasInfinityAutobuyer() ? '' : 'none'~ onclick="InfinityAutobuyer(5).toggle()">Auto: ~r InfinityAutobuyer(5).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=InfinityGenerator(6).isVisible() ? '' : 'none'~>
          <td>Infinity Generator 6</td>
          <td>~f InfinityGenerator(6).amount() ~</td>
          <td>~f InfinityGenerator(6).perSecond() ~/s</td>
          <td>~f InfinityGenerator(6).multiplier() ~x</td>
          <td><button ~class=InfinityGenerator(6).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(6).buy()">Cost: ~i InfinityGenerator(6).cost() ~ IP</button></td>
          <td><button ~class=InfinityGenerator(6).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(6).buyMax()">Max</button></td>
          <td><button ~style.display=InfinityAutobuyer(6).hasInfinityAutobuyer() ? '' : 'none'~ onclick="InfinityAutobuyer(6).toggle()">Auto: ~r InfinityAutobuyer(6).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=InfinityGenerator(7).isVisible() ? '' : 'none'~>
          <td>Infinity Generator 7</td>
          <td>~f InfinityGenerator(7).amount() ~</td>
          <td>~f InfinityGenerator(7).perSecond() ~/s</td>
          <td>~f InfinityGenerator(7).multiplier() ~x</td>
          <td><button ~class=InfinityGenerator(7).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(7).buy()">Cost: ~i InfinityGenerator(7).cost() ~ IP</button></td>
          <td><button ~class=InfinityGenerator(7).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(7).buyMax()">Max</button></td>
          <td><button ~style.display=InfinityAutobuyer(7).hasInfinityAutobuyer() ? '' : 'none'~ onclick="InfinityAutobuyer(7).toggle()">Auto: ~r InfinityAutobuyer(7).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=InfinityGenerator(8).isVisible() ? '' : 'none'~>
          <td>Infinity Generator 8</td>
          <td>~f InfinityGenerator(8).amount() ~</td>
          <td>~f InfinityGenerator(8).perSecond() ~/s</td>
          <td>~f InfinityGenerator(8).multiplier() ~x</td>
          <td><button ~class=InfinityGenerator(8).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(8).buy()">Cost: ~i InfinityGenerator(8).cost() ~ IP</button></td>
          <td><button ~class=InfinityGenerator(8).canBuy() ? "" : "disabled"~ onclick="InfinityGenerator(8).buyMax()">Max</button></td>
          <td><button ~style.display=InfinityAutobuyer(8).hasInfinityAutobuyer() ? '' : 'none'~ onclick="InfinityAutobuyer(8).toggle()">Auto: ~r InfinityAutobuyer(8).isOn() ? "On" : "Off" ~</button></td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'challenges' ? '' : 'none'~>
      <span>You have completed ~i Challenge.numberOfChallengesCompleted() ~ challenge~s Challenge.numberOfChallengesCompleted() ~, multiplying all ~r Generators.term() ~ by ~f Challenge.multiplier() ~. <button onclick="Challenge.toggleRestartOnCompletion()">Restart challenges on completion: ~r Challenge.restartOnCompletion() ? "On" : "Off" ~</button></span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(1)~>
              <span>Challenge 1</span>
              <br/>
              <span>Generator 1 multiplier is raised ^~i 4 ~. All other ~r Generators.term(true) ~ multipliers are always ~i 1 ~x.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(1) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(1)">~r Challenge.isChallengeRunning(1) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Faster Generator 1 Autobuyer (triggering every game tick)</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(2)~>
              <span>Challenge 2</span>
              <br/>
              <span>There's a multiplier on all ~r Generators.term() ~ increasing linearly from ~i 0 ~ to ~i 1 ~ over ~ti 256 ~. Every time you buy a generator or boost, or sacrifice or prestige, this multiplier resets to ~i 0 ~.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(2) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(2)">~r Challenge.isChallengeRunning(2) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Faster Generator 2 Autobuyer (triggering every game tick)</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(3)~>
              <span>Challenge 3</span>
              <br/>
              <span>There's a multiplier on Generator 1, starting at ~r formatWithPrecision(1 / 256, 5) ~ and doubling every ~ti 256 ~. Every time you prestige, this multiplier resets to ~r formatWithPrecision(1 / 256, 5) ~.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(3) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(3)">~r Challenge.isChallengeRunning(3) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Faster Generator 3 Autobuyer (triggering every game tick)</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(4)~>
              <span>Challenge 4</span>
              <br/>
              <span>Every time you buy a ~r Generators.term(true) ~, the amounts of all lower ~r Generators.term() ~ are reset, like a sacrifice without the benefit.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(4) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(4)">~r Challenge.isChallengeRunning(4) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Faster Generator 4 Autobuyer (triggering every game tick)</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(5)~>
              <span>Challenge 5</span>
              <br/>
              <span>All ~r Generators.term(true) ~ cost increases are raised ^~i 2 ~.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(5) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(5)">~r Challenge.isChallengeRunning(5) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Faster Generator 5 Autobuyer (triggering every game tick)</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(6)~>
              <span>Challenge 6</span>
              <br/>
              <span>There are only 6 ~r Generators.term() ~. (Generator 7 and Generator 8 don't exist.)</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(6) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(6)">~r Challenge.isChallengeRunning(6) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Faster Generator 6 Autobuyer (triggering every game tick)</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(7)~>
              <span>Challenge 7</span>
              <br/>
              <span>You can only buy ~i 343 ~ total ~r Generators.term() ~ and boosts throughout the challenge. This count does not reset on prestige.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(7) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(7)">~r Challenge.isChallengeRunning(7) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Faster Generator 7 Autobuyer (triggering every game tick)</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(8)~>
              <span>Challenge 8</span>
              <br/>
              <span>You can't buy boosts, the boost multiplier is ~i 1 ~x, and prestige power is raised ^~f 0.5 ~, but all ~r Generators.term() ~ (including Generator 8) are multiplied by your amount of Generator 8.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(8) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(8)">~r Challenge.isChallengeRunning(8) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Faster Generator 8 Autobuyer (triggering every game tick)</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(9)~>
              <span>Challenge 9</span>
              <br/>
              <span>You can't buy boosts and the boost multiplier is ~i 1 ~x.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(9) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(9)">~r Challenge.isChallengeRunning(9) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Faster Boost Autobuyer (triggering every game tick)</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(10)~>
              <span>Challenge 10</span>
              <br/>
              <span>You can't buy boosts or more than one of each ~r Generators.term(true) ~, and you can't prestige. You can sacrifice multiple times at the same point and the sacrifice bonuses multiply, but sacrifice resets everything that prestige resets.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(10) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(10)">~r Challenge.isChallengeRunning(10) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Sacrifice Autobuyer</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(11)~>
              <span>Challenge 11</span>
              <br/>
              <span>Prestige power is raised ^~f 0.5 ~.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(11) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(11)">~r Challenge.isChallengeRunning(11) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Prestige Autobuyer</span>
            </div>
          </td>
          <td>
            <div class="challengediv" ~style.background=Challenge.color(12)~>
              <span>Challenge 12</span>
              <br/>
              <span>Infinity generators are disabled.</span>
              <br/>
              <span>~r Challenge.challengeStatusDescription(12) ~</span>
              <br/>
              <span><button onclick="Challenge.startOrExitChallenge(12)">~r Challenge.isChallengeRunning(12) ? "Exit challenge" : "Start challenge" ~</button></span>
              <br/>
              <span>Reward: Infinity Autobuyer</span>
            </div>
          </td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'autobuyers' ? '' : 'none'~>
      <span>You have ~i Autobuyers.numberOfAutobuyers() ~ autobuyer~s Autobuyers.numberOfAutobuyers() ~.</span>
      <br ~style.display=Autobuyers.isLockedResetAutobuyer(15) ? '' : 'none'~/>
      <span ~style.display=Autobuyers.isLockedResetAutobuyer(15) ? '' : 'none'~>The complexity autobuyer is off when unlocked unless you explicitly pre-set it to be on.</span>
      <br/>
      <span>Turn newly unlocked autobuyers on when unlocked: <input type="checkbox" ~!checked=Autobuyers.areNewlyUnlockedAutobuyersOn()~ ~!onchange=function() {Autobuyers.setAreNewlyUnlockedAutobuyersOn(this.checked)}~></input></span>
      <div ~style.display=Autobuyers.anyLockedResetAutobuyers() ? '' : 'none'~>
        <span>Pre-set locked reset autobuyers (this overrides the above setting):</span>
        <br/>
        <span ~style.display=Autobuyers.isLockedResetAutobuyer(12) ? '' : 'none'~>Infinity: <input type="checkbox" class="autobuyer-checkbox-12" ~!checked=Autobuyer(12).isOn()~ ~!onchange=function() {Autobuyer(12).setIsOn(this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Autobuyers.isLockedResetAutobuyer(13) ? '' : 'none'~>Eternity: <input type="checkbox" class="autobuyer-checkbox-13" ~!checked=Autobuyer(13).isOn()~ ~!onchange=function() {Autobuyer(13).setIsOn(this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Autobuyers.isLockedResetAutobuyer(14) ? '' : 'none'~>Permanence: <input type="checkbox" class="autobuyer-checkbox-14" ~!checked=Autobuyer(14).isOn()~ ~!onchange=function() {Autobuyer(14).setIsOn(this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Autobuyers.isLockedResetAutobuyer(15) ? '' : 'none'~>Complexity: <input type="checkbox" class="autobuyer-checkbox-15" ~!checked=Autobuyer(15).isOn()~ ~!onchange=function() {Autobuyer(15).setIsOn(this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=Autobuyers.isLockedResetAutobuyer(16) ? '' : 'none'~>Finality: <input type="checkbox" class="autobuyer-checkbox-16" ~!checked=Autobuyer(16).isOn()~ ~!onchange=function() {Autobuyer(16).setIsOn(this.checked)}~></input></span>
      </div>
      <br/>
      <span>Autobuyers triggering at the same time trigger from lowest to highest autobuyer order.</span>
      <br/>
      <div ~style.display=Autobuyers.areAnyAutobuyersSlow() ? '' : 'none'~>
        <span>Slow autobuyers will trigger in ~t Autobuyers.timeUntilNextSlowTrigger() ~.</span>
        <br/>
      </div>
      <div ~style.display=Autobuyers.areAnyAutobuyersFast() ? '' : 'none'~>
        <span>Fast autobuyers <span ~style.display=Autobuyers.doFastAutobuyersAlwaysTrigger() ? '' : 'none'~>trigger every tick.</span><span ~style.display=Autobuyers.doFastAutobuyersAlwaysTrigger() ? 'none' : ''~>will trigger in ~t Autobuyers.timeUntilNextFastTrigger() ~.</span></span>
        <br/>
      </div>
      <div ~style.display=Autobuyers.areThereAnyAutobuyers() ? '' : 'none'~>
        <span>Make autobuyers trigger at most every X seconds (~i 0 ~ to always trigger): <input type="text" ~!value=Autobuyers.autobuyersTimerLength()~ ~!onchange=function() {Autobuyers.setAutobuyersTimerLength(+this.value)}~></input></span>
        <br/>
      </div>
      <div ~style.display=Autobuyers.areThereAnyAutobuyers() ? '' : 'none'~>
        <span>Automatically turn all autobuyers off when entering challenges: <input type="checkbox" ~!checked=Autobuyers.disableWhenStartingChallenge()~ ~!onchange=function() {Autobuyers.setDisableWhenStartingChallenge(this.checked)}~></input><span ~style.display=SpecialTabs.isTabVisible('infinity-challenges') ? '' : 'none'~> when entering infinity challenges: <input type="checkbox" ~!checked=Autobuyers.disableWhenStartingInfinityChallenge()~ ~!onchange=function() {Autobuyers.setDisableWhenStartingInfinityChallenge(this.checked)}~></input></span></span>
        <br/>
      </div>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>Autobuyers options on this tab only apply to autobuyers on this tab.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span><button onclick="Autobuyers.setAll(true)">Turn all autobuyers on</button> <button onclick="Autobuyers.setAll(false)">Turn all autobuyers off</button> <button onclick="Autobuyers.toggleAll()">Toggle all autobuyers</button> <button ~style.display=(Autobuyers.areAnyAutobuyersSlow() && Autobuyers.areAnyAutobuyersFast()) ? '' : 'none'~ onclick="Autobuyers.synchronize()">Synchronize slow and fast autobuyers</button></span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(1).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(1).isSlow() ? '' : 'none'~>Slow </span>Generator 1 Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-1" ~!checked=Autobuyer(1).isOn()~ ~!onchange=function() {Autobuyer(1).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(1).mode()~ ~!onchange=function() {Autobuyer(1).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
              <br/>
              <span>Autobuyer order: <select ~!value=Autobuyer(1).priority().toString()~ ~!onchange=function() {Autobuyer(1).setPriority(+this.value)}~>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
              </select></span>
            </div>
            <button ~style.display=Autobuyer(1).hasAutobuyer() ? 'none' : ''~ ~class=Autobuyer(1).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(1).unlockSlow()">
              Unlock Slow Generator 1 Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(1).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(2).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(2).isSlow() ? '' : 'none'~>Slow </span>Generator 2 Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-2" ~!checked=Autobuyer(2).isOn()~ ~!onchange=function() {Autobuyer(2).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(2).mode()~ ~!onchange=function() {Autobuyer(2).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
              <br/>
              <span>Autobuyer order: <select ~!value=Autobuyer(2).priority().toString()~ ~!onchange=function() {Autobuyer(2).setPriority(+this.value)}~>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=Autobuyer(2).hasAutobuyer() ? 'none' : ''~ ~class=Autobuyer(2).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(2).unlockSlow()">
              Unlock Slow Generator 2 Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(2).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(3).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(3).isSlow() ? '' : 'none'~>Slow </span>Generator 3 Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-3" ~!checked=Autobuyer(3).isOn()~ ~!onchange=function() {Autobuyer(3).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(3).mode()~ ~!onchange=function() {Autobuyer(3).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
              <br/>
              <span>Autobuyer order: <select ~!value=Autobuyer(3).priority().toString()~ ~!onchange=function() {Autobuyer(3).setPriority(+this.value)}~>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=Autobuyer(3).hasAutobuyer() ? 'none' : ''~ ~class=Autobuyer(3).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(3).unlockSlow()">
              Unlock Slow Generator 3 Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(3).unlockSlowCost() ~ stars
            </button>
          </td>
        </tr>
        <tr>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(4).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(4).isSlow() ? '' : 'none'~>Slow </span>Generator 4 Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-4" ~!checked=Autobuyer(4).isOn()~ ~!onchange=function() {Autobuyer(4).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(4).mode()~ ~!onchange=function() {Autobuyer(4).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
              <br/>
              <span>Autobuyer order: <select ~!value=Autobuyer(4).priority().toString()~ ~!onchange=function() {Autobuyer(4).setPriority(+this.value)}~>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=Autobuyer(4).hasAutobuyer() ? 'none' : ''~ ~class=Autobuyer(4).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(4).unlockSlow()">
              Unlock Slow Generator 4 Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(4).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(5).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(5).isSlow() ? '' : 'none'~>Slow </span>Generator 5 Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-5" ~!checked=Autobuyer(5).isOn()~ ~!onchange=function() {Autobuyer(5).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(5).mode()~ ~!onchange=function() {Autobuyer(5).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
              <br/>
              <span>Autobuyer order: <select ~!value=Autobuyer(5).priority().toString()~ ~!onchange=function() {Autobuyer(5).setPriority(+this.value)}~>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=Autobuyer(5).hasAutobuyer() ? 'none' : ''~ ~class=Autobuyer(5).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(5).unlockSlow()">
              Unlock Slow Generator 5 Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(5).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(6).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(6).isSlow() ? '' : 'none'~>Slow </span>Generator 6 Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-6" ~!checked=Autobuyer(6).isOn()~ ~!onchange=function() {Autobuyer(6).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(6).mode()~ ~!onchange=function() {Autobuyer(6).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
              <br/>
              <span>Autobuyer order: <select ~!value=Autobuyer(6).priority().toString()~ ~!onchange=function() {Autobuyer(6).setPriority(+this.value)}~>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=Autobuyer(6).hasAutobuyer() ? 'none' : ''~ ~class=Autobuyer(6).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(6).unlockSlow()">
              Unlock Slow Generator 6 Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(6).unlockSlowCost() ~ stars
            </button>
          </td>
        </tr>
        <tr>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(7).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(7).isSlow() ? '' : 'none'~>Slow </span>Generator 7 Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-7" ~!checked=Autobuyer(7).isOn()~ ~!onchange=function() {Autobuyer(7).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(7).mode()~ ~!onchange=function() {Autobuyer(7).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
              <br/>
              <span>Autobuyer order: <select ~!value=Autobuyer(7).priority().toString()~ ~!onchange=function() {Autobuyer(7).setPriority(+this.value)}~>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=Autobuyer(7).hasAutobuyer() ? 'none' : ''~ ~class=Autobuyer(7).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(7).unlockSlow()">
              Unlock Slow Generator 7 Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(7).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(8).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(8).isSlow() ? '' : 'none'~>Slow </span>Generator 8 Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-8" ~!checked=Autobuyer(8).isOn()~ ~!onchange=function() {Autobuyer(8).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(8).mode()~ ~!onchange=function() {Autobuyer(8).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
              <br/>
              <span>Autobuyer order: <select ~!value=Autobuyer(8).priority().toString()~ ~!onchange=function() {Autobuyer(8).setPriority(+this.value)}~>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=Autobuyer(8).hasAutobuyer() ? 'none' : ''~ ~class=Autobuyer(8).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(8).unlockSlow()">
              Unlock Slow Generator 8 Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(8).unlockSlowCost() ~ stars
            </button>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(9).hasAutobuyer() ? '' : 'none'~>
              <span><span ~style.display=Autobuyer(9).isSlow() ? '' : 'none'~>Slow </span>Boost Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-9" ~!checked=Autobuyer(9).isOn()~ ~!onchange=function() {Autobuyer(9).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(9).mode()~ ~!onchange=function() {Autobuyer(9).setMode(this.value)}~>
                <option value="Buy singles">Buy singles</option>
                <option value="Buy max">Buy max</option>
              </select></span>
              <br/>
              <span>Autobuyer order: <select ~!value=Autobuyer(9).priority().toString()~ ~!onchange=function() {Autobuyer(9).setPriority(+this.value)}~>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
              </select></span>
            </div>
            <button class="autobuyerunlockbutton" ~style.display=Autobuyer(9).hasAutobuyer() ? 'none' : ''~ ~class=Autobuyer(9).canUnlockSlow() ? "autobuyerunlockbutton" : "autobuyerunlockbutton disabled"~ onclick="Autobuyer(9).unlockSlow()">
              Unlock Slow Boost Autobuyer
              <br/>
              (triggering every ~ti 16 ~)
              <br/>
              Cost: ~i Autobuyer(9).unlockSlowCost() ~ stars
            </button>
          </td>
        </tr>
        <tr>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(10).hasAutobuyer() ? '' : 'none'~>
              <span>Sacrifice Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-10" ~!checked=Autobuyer(10).isOn()~ ~!onchange=function() {Autobuyer(10).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(10).mode()~ ~!onchange=function() {Autobuyer(10).setMode(this.value)}~>
                <option value="Multiplier">Multiplier</option>
                <option value="Time">Time</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(10).mode() ~:</span>
              <br/>
              <span><input type="text" ~!value=Autobuyer(10).priority().toString()~ ~!onchange=function() {Autobuyer(10).setPriority(new Decimal(this.value))}~></input></span>
            </div>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(11).hasAutobuyer() ? '' : 'none'~>
              <span>Prestige Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-11" ~!checked=Autobuyer(11).isOn()~ ~!onchange=function() {Autobuyer(11).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(11).mode()~ ~!onchange=function() {Autobuyer(11).setMode(this.value)}~>
                <option value="Multiplier">Multiplier</option>
                <option value="Time">Time</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(11).mode() ~:</span>
              <br/>
              <span><input type="text" ~!value=Autobuyer(11).priority().toString()~ ~!onchange=function() {Autobuyer(11).setPriority(new Decimal(this.value))}~></input></span>
            </div>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(12).hasAutobuyer() ? '' : 'none'~>
              <span>Infinity Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-12" ~!checked=Autobuyer(12).isOn()~ ~!onchange=function() {Autobuyer(12).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(12).mode()~ ~!onchange=function() {Autobuyer(12).setMode(this.value)}~>
                <option value="Amount">Amount</option>
                <option value="Time">Time</option>
                <option value="X times last">X times last</option>
                <option value="X times best of last ten">X times best of last ten</option>
                <option value="Time past peak/sec">Time past peak/sec</option>
                <option value="Fraction of peak/sec">Fraction of peak/sec</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(12).mode() ~:</span>
              <br/>
              <span><input type="text" ~!value=Autobuyer(12).priority().toString()~ ~!onchange=function() {Autobuyer(12).setPriority(new Decimal(this.value))}~></input></span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(13).hasAutobuyer() ? '' : 'none'~>
              <span>Eternity Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-13" ~!checked=Autobuyer(13).isOn()~ ~!onchange=function() {Autobuyer(13).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(13).mode()~ ~!onchange=function() {Autobuyer(13).setMode(this.value)}~>
                <option value="Amount">Amount</option>
                <option value="Time">Time</option>
                <option value="X times last">X times last</option>
                <option value="X times best of last ten">X times best of last ten</option>
                <option value="Time past peak/sec">Time past peak/sec</option>
                <option value="Fraction of peak/sec">Fraction of peak/sec</option>
                <option value="Chroma amount" ~style.display=(Chroma.isUnlocked() || PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~>Chroma amount</option>
                <option value="Chroma as fraction of cap" ~style.display=(Chroma.isUnlocked() || PrestigeLayerProgress.hasReached('complexity')) ? '' : 'none'~>Chroma as fraction of cap</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(13).mode() ~:</span>
              <br/>
              <span><input type="text" ~!value=Autobuyer(13).priority().toString()~ ~!onchange=function() {Autobuyer(13).setPriority(new Decimal(this.value))}~></input></span>
            </div>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(14).hasAutobuyer() ? '' : 'none'~>
              <span>Permanence Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-14" ~!checked=Autobuyer(14).isOn()~ ~!onchange=function() {Autobuyer(14).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(14).mode()~ ~!onchange=function() {Autobuyer(14).setMode(this.value)}~>
                <option value="Amount">Amount</option>
                <option value="Time">Time</option>
                <option value="X times last">X times last</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(14).mode() ~:</span>
              <br/>
              <span><input type="text" ~!value=Autobuyer(14).priority().toString()~ ~!onchange=function() {Autobuyer(14).setPriority(new Decimal(this.value))}~></input></span>
            </div>
          </td>
          <td>
            <div class="autobuyerdiv" ~style.display=Autobuyer(15).hasAutobuyer() ? '' : 'none'~>
              <span>Complexity Autobuyer</span>
              <br/>
              <span>On: <input type="checkbox" class="autobuyer-checkbox-15" ~!checked=Autobuyer(15).isOn()~ ~!onchange=function() {Autobuyer(15).setIsOn(this.checked)}~></input></span>
              <br/>
              <span>Mode: <select ~!value=Autobuyer(15).mode()~ ~!onchange=function() {Autobuyer(15).setMode(this.value)}~>
                <option value="Amount">Amount</option>
                <option value="Time">Time</option>
                <option value="X times last">X times last</option>
                <option value="X times best of last ten">X times best of last ten</option>
                <option value="Time past peak/sec">Time past peak/sec</option>
                <option value="Fraction of peak/sec">Fraction of peak/sec</option>
              </select></span>
              <br/>
              <span>~r Autobuyer(15).mode() ~:</span>
              <br/>
              <span><input type="text" ~!value=Autobuyer(15).priority().toString()~ ~!onchange=function() {Autobuyer(15).setPriority(new Decimal(this.value))}~></input></span>
            </div>
          </td>
        </tr>
        <tr>
          <td/>
          <td>
          <div class="autobuyerdiv" ~style.display=Autobuyer(16).hasAutobuyer() ? '' : 'none'~>
            <span>Finality Autobuyer</span>
            <br/>
            <span>On: <input type="checkbox" class="autobuyer-checkbox-16" ~!checked=Autobuyer(16).isOn()~ ~!onchange=function() {Autobuyer(16).setIsOn(this.checked)}~></input></span>
          </div>
        </td>
        <td/>
      </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'infinity-challenges' ? '' : 'none'~>
      <span>You have completed ~i InfinityChallenge.numberOfInfinityChallengesCompleted() ~ infinity challenge~s InfinityChallenge.numberOfInfinityChallengesCompleted() ~, multiplying all infinity generators by ~f InfinityChallenge.multiplier() ~.</span>
      <br/>
      <span>You have produced ~f InfinityChallenge.totalStarsProducedThisEternity() ~ stars this eternity.</span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(1)~>
              <span>Infinity Challenge 1</span>
              <br/>
              <span>Challenges 2, 3, 4, 5, 6, and 7 all apply.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(1) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(1) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(1) ~</span>
              <br/>
              <span><button onclick="InfinityChallenge.startOrExitInfinityChallenge(1)">~r InfinityChallenge.isInfinityChallengeRunning(1) ? "Exit challenge" : (InfinityChallenge.isInfinityChallengeRequirementReached(1) ? "Start challenge" : "Requires more stars") ~</button></span>
              <br/>
              <span>Reward: The multiplier to generators based on total IP this eternity is uncapped.</span>
            </div>
          </td>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(2)~>
              <span>Infinity Challenge 2</span>
              <br/>
              <span>Prestige power is raised ^~f 0.5 ~, but sacrifice is far stronger.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(2) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(2) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(2) ~</span>
              <br/>
              <span><button onclick="InfinityChallenge.startOrExitInfinityChallenge(2)">~r InfinityChallenge.isInfinityChallengeRunning(2) ? "Exit challenge" : (InfinityChallenge.isInfinityChallengeRequirementReached(2) ? "Start challenge" : "Requires more stars") ~</button></span>
              <br/>
              <span>Reward: Sacrifice is stronger.</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(3)~>
              <span>Infinity Challenge 3</span>
              <br/>
              <span>The prestige power formula is worse the more prestiges you do.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(3) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(3) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(3) ~</span>
              <br/>
              <span><button onclick="InfinityChallenge.startOrExitInfinityChallenge(3)">~r InfinityChallenge.isInfinityChallengeRunning(3) ? "Exit challenge" : (InfinityChallenge.isInfinityChallengeRequirementReached(3) ? "Start challenge" : "Requires more stars") ~</button></span>
              <br/>
              <span>Reward: Multiplier to Infinity Generator 1 based on prestige power (~f InfinityChallenge.infinityChallenge3Reward() ~).</span>
            </div>
          </td>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(4)~>
              <span>Infinity Challenge 4</span>
              <br/>
              <span>There's an exponent on the multipliers of all ~r Generators.term() ~ increasing linearly from ~i 0 ~ to ~i 1 ~ over ~ti 16 ~. Every time you buy a generator or boost, or sacrifice or prestige, this exponent resets to ~i 0 ~.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(4) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(4) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(4) ~</span>
              <br/>
              <span><button onclick="InfinityChallenge.startOrExitInfinityChallenge(4)">~r InfinityChallenge.isInfinityChallengeRunning(4) ? "Exit challenge" : (InfinityChallenge.isInfinityChallengeRequirementReached(4) ? "Start challenge" : "Requires more stars") ~</button></span>
              <br/>
              <span>Reward: Multiplier to all infinity generators based on time in infinity (~f InfinityChallenge.infinityChallenge4Reward() ~).</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(5)~>
              <span>Infinity Challenge 5</span>
              <br/>
              <span>There's an exponent on the multipliers of all ~r Generators.term() ~ based on stars, capping at ~i 1 ~.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(5) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(5) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(5) ~</span>
              <br/>
              <span><button onclick="InfinityChallenge.startOrExitInfinityChallenge(5)">~r InfinityChallenge.isInfinityChallengeRunning(5) ? "Exit challenge" : (InfinityChallenge.isInfinityChallengeRequirementReached(5) ? "Start challenge" : "Requires more stars") ~</button></span>
              <br/>
              <span>Reward: Exponent to Infinity Generator 5 multiplier based on stars (~f InfinityChallenge.infinityChallenge5Reward() ~).</span>
            </div>
          </td>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(6)~>
              <span>Infinity Challenge 6</span>
              <br/>
              <span>The prestige power formula alternates between being raised ^~i 1 ~ (as usual) and ^~f 0.5 ~ every time you prestige.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(6) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(6) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(6) ~</span>
              <br/>
              <span><button onclick="InfinityChallenge.startOrExitInfinityChallenge(6)">~r InfinityChallenge.isInfinityChallengeRunning(6) ? "Exit challenge" : (InfinityChallenge.isInfinityChallengeRequirementReached(6) ? "Start challenge" : "Requires more stars") ~</button></span>
              <br/>
              <span>Reward: Exponent to prestige power based on infinity stars (~f InfinityChallenge.infinityChallenge6Reward() ~).</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(7)~>
              <span>Infinity Challenge 7</span>
              <br/>
              <span>Prestige power is raised ^~f 0.5 ~, but the multiplier per boost is squared.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(7) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(7) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(7) ~</span>
              <br/>
              <span><button onclick="InfinityChallenge.startOrExitInfinityChallenge(7)">~r InfinityChallenge.isInfinityChallengeRunning(7) ? "Exit challenge" : (InfinityChallenge.isInfinityChallengeRequirementReached(7) ? "Start challenge" : "Requires more stars") ~</button></span>
              <br/>
              <span>Reward: ~i 2 ~ is added to the multiplier per boost.</span>
            </div>
          </td>
          <td>
            <div class="infinitychallengediv" ~style.background=InfinityChallenge.color(8)~>
              <span>Infinity Challenge 8</span>
              <br/>
              <span>You can only buy ~i 7 ~ total ~r Generators.term() ~ (apart from Generator 8) and boosts throughout the challenge. Each Generator 8 you buy gives you ~i 8 ~ extra purchases.</span>
              <br/>
              <span>Requirement to start: ~f InfinityChallenge.getInfinityChallengeRequirement(8) ~ stars this eternity</span>
              <br/>
              <span>Goal: ~f InfinityChallenge.getInfinityChallengeGoal(8) ~ stars</span>
              <br/>
              <span>~r InfinityChallenge.infinityChallengeStatusDescription(8) ~</span>
              <br/>
              <span><button onclick="InfinityChallenge.startOrExitInfinityChallenge(8)">~r InfinityChallenge.isInfinityChallengeRunning(8) ? "Exit challenge" : (InfinityChallenge.isInfinityChallengeRequirementReached(8) ? "Start challenge" : "Requires more stars") ~</button></span>
              <br/>
              <span>Reward: Multiplier to Infinity Generator 8 equal to number of Generator 8 (lower-bounded by ~i 1 ~).</span>
            </div>
          </td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'eternity' ? '' : 'none'~>
      <span>You have ~i EternityPoints.amount() ~ eternity point~s EternityPoints.amount() ~ (EP).
        <button ~class=EternityMaxAll.anythingToBuy() ? "" : "disabled"~ onclick="EternityMaxAll.maxAll()">Max all</button>
        <button ~class=EternityMaxAll.anyUpgradesToBuy() ? "" : "disabled"~ onclick="EternityMaxAll.maxUpgrades()">Max upgrades</button>
        <button ~class=EternityMaxAll.anyGeneratorsToBuy() ? "" : "disabled"~ onclick="EternityMaxAll.maxGenerators()">Max generators</button>
      </span>
      <br/>
      <span>You have produced ~i EternityPoints.totalEPProducedThisComplexity() ~ eternity point~s EternityPoints.totalEPProducedThisComplexity() ~ this complexity.</span>
      <br/>
      <span>You have ~q Eternities.amount() ~ eternit~y Eternities.amount() ~, multiplying all eternity generators (EGs) by ~q Eternities.eternityGeneratorMultiplierForDisplay() ~.</span>
      <br/>
      <span>You have ~f EternityStars.amount() ~ eternity stars, multiplying all normal and infinity generators by ~f EternityStars.multiplier() ~</span>
      <br/>
      <span>and raising all normal and infinity generator multipliers ^~r formatWithPrecision(EternityStars.power(), 5) ~.</span>
      <br/>
      <span>You are getting ~f EternityStars.perSecond() ~ eternity stars per second.</span>
      <br/>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <th colspan="5">Eternity Upgrades:</th>
        <tr>
          <td>Increase the per-purchase multiplier for EGs:</td>
          <td><span ~style.display=EternityUpgrade(1).atBoughtLimit() ? 'none' : ''~>^~i EternityUpgrade(1).effect() ~ → ^~i EternityUpgrade(1).nextEffect() ~</span><span ~style.display=EternityUpgrade(1).atBoughtLimit() ? '' : 'none'~>^~i EternityUpgrade(1).effect() ~ (maxed)</span></td>
          <td><span ~style.display=EternityUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(1).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(1).buy()">Cost: ~i EternityUpgrade(1).cost() ~ EP</button></span></td>
          <td><span ~style.display=EternityUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(1).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(1).buyMax()">Max</button></span></td>
          <td><span ~style.display=EternityAutobuyer(9).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(9).toggle()">Auto: ~r EternityAutobuyer(9).isOn() ? "On" : "Off" ~</button></span></td>
        </tr>
        <tr>
          <td>Increase the multiplier per boost:</td>
          <td><span ~style.display=EternityUpgrade(2).atBoughtLimit() ? 'none' : ''~>~f EternityUpgrade(2).effect() ~x → ~f EternityUpgrade(2).nextEffect() ~x</span><span ~style.display=EternityUpgrade(2).atBoughtLimit() ? '' : 'none'~>~f EternityUpgrade(2).effect() ~x (maxed)</span></td>
          <td><span ~style.display=EternityUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(2).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(2).buy()">Cost: ~i EternityUpgrade(2).cost() ~ EP</button></span></td>
          <td><span ~style.display=EternityUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(2).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(2).buyMax()">Max</button></span></td>
          <td><span ~style.display=EternityAutobuyer(10).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(10).toggle()">Auto: ~r EternityAutobuyer(10).isOn() ? "On" : "Off" ~</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to EGs based on total EP this complexity:</td>
          <td><span ~style.display=EternityUpgrade(3).atBoughtLimit() ? 'none' : ''~>~f EternityUpgrade(3).effect() ~x → ~f EternityUpgrade(3).nextEffect() ~x</span><span ~style.display=EternityUpgrade(3).atBoughtLimit() ? '' : 'none'~>~f EternityUpgrade(3).effect() ~x (maxed)</span></td>
          <td><span ~style.display=EternityUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(3).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(3).buy()">Cost: ~i EternityUpgrade(3).cost() ~ EP</button></span></td>
          <td><span ~style.display=EternityUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=EternityUpgrade(3).canBuy() ? "" : "disabled"~ onclick="EternityUpgrade(3).buyMax()">Max</button></span></td>
          <td><span ~style.display=EternityAutobuyer(11).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(11).toggle()">Auto: ~r EternityAutobuyer(11).isOn() ? "On" : "Off" ~</button></span></td>
        </tr>
      </table>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr ~style.display=EternityGenerator(1).isVisible() ? '' : 'none'~>
          <td>Eternity Generator 1</td>
          <td>~f EternityGenerator(1).amount() ~</td>
          <td>~f EternityGenerator(1).perSecond() ~/s</td>
          <td>~f EternityGenerator(1).multiplier() ~x</td>
          <td><button ~class=EternityGenerator(1).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(1).buy()">Cost: ~i EternityGenerator(1).cost() ~ EP</button></td>
          <td><button ~class=EternityGenerator(1).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(1).buyMax()">Max</button></td>
          <td><button ~style.display=EternityAutobuyer(1).hasEternityAutobuyer() ? '' : 'none'~ onclick="EternityAutobuyer(1).toggle()">Auto: ~r EternityAutobuyer(1).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=EternityGenerator(2).isVisible() ? '' : 'none'~>
          <td>Eternity Generator 2</td>
          <td>~f EternityGenerator(2).amount() ~</td>
          <td>~f EternityGenerator(2).perSecond() ~/s</td>
          <td>~f EternityGenerator(2).multiplier() ~x</td>
          <td><button ~class=EternityGenerator(2).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(2).buy()">Cost: ~i EternityGenerator(2).cost() ~ EP</button></td>
          <td><button ~class=EternityGenerator(2).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(2).buyMax()">Max</button></td>
          <td><button ~style.display=EternityAutobuyer(2).hasEternityAutobuyer() ? '' : 'none'~ onclick="EternityAutobuyer(2).toggle()">Auto: ~r EternityAutobuyer(2).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=EternityGenerator(3).isVisible() ? '' : 'none'~>
          <td>Eternity Generator 3</td>
          <td>~f EternityGenerator(3).amount() ~</td>
          <td>~f EternityGenerator(3).perSecond() ~/s</td>
          <td>~f EternityGenerator(3).multiplier() ~x</td>
          <td><button ~class=EternityGenerator(3).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(3).buy()">Cost: ~i EternityGenerator(3).cost() ~ EP</button></td>
          <td><button ~class=EternityGenerator(3).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(3).buyMax()">Max</button></td>
          <td><button ~style.display=EternityAutobuyer(3).hasEternityAutobuyer() ? '' : 'none'~ onclick="EternityAutobuyer(3).toggle()">Auto: ~r EternityAutobuyer(3).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=EternityGenerator(4).isVisible() ? '' : 'none'~>
          <td>Eternity Generator 4</td>
          <td>~f EternityGenerator(4).amount() ~</td>
          <td>~f EternityGenerator(4).perSecond() ~/s</td>
          <td>~f EternityGenerator(4).multiplier() ~x</td>
          <td><button ~class=EternityGenerator(4).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(4).buy()">Cost: ~i EternityGenerator(4).cost() ~ EP</button></td>
          <td><button ~class=EternityGenerator(4).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(4).buyMax()">Max</button></td>
          <td><button ~style.display=EternityAutobuyer(4).hasEternityAutobuyer() ? '' : 'none'~ onclick="EternityAutobuyer(4).toggle()">Auto: ~r EternityAutobuyer(4).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=EternityGenerator(5).isVisible() ? '' : 'none'~>
          <td>Eternity Generator 5</td>
          <td>~f EternityGenerator(5).amount() ~</td>
          <td>~f EternityGenerator(5).perSecond() ~/s</td>
          <td>~f EternityGenerator(5).multiplier() ~x</td>
          <td><button ~class=EternityGenerator(5).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(5).buy()">Cost: ~i EternityGenerator(5).cost() ~ EP</button></td>
          <td><button ~class=EternityGenerator(5).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(5).buyMax()">Max</button></td>
          <td><button ~style.display=EternityAutobuyer(5).hasEternityAutobuyer() ? '' : 'none'~ onclick="EternityAutobuyer(5).toggle()">Auto: ~r EternityAutobuyer(5).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=EternityGenerator(6).isVisible() ? '' : 'none'~>
          <td>Eternity Generator 6</td>
          <td>~f EternityGenerator(6).amount() ~</td>
          <td>~f EternityGenerator(6).perSecond() ~/s</td>
          <td>~f EternityGenerator(6).multiplier() ~x</td>
          <td><button ~class=EternityGenerator(6).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(6).buy()">Cost: ~i EternityGenerator(6).cost() ~ EP</button></td>
          <td><button ~class=EternityGenerator(6).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(6).buyMax()">Max</button></td>
          <td><button ~style.display=EternityAutobuyer(6).hasEternityAutobuyer() ? '' : 'none'~ onclick="EternityAutobuyer(6).toggle()">Auto: ~r EternityAutobuyer(6).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=EternityGenerator(7).isVisible() ? '' : 'none'~>
          <td>Eternity Generator 7</td>
          <td>~f EternityGenerator(7).amount() ~</td>
          <td>~f EternityGenerator(7).perSecond() ~/s</td>
          <td>~f EternityGenerator(7).multiplier() ~x</td>
          <td><button ~class=EternityGenerator(7).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(7).buy()">Cost: ~i EternityGenerator(7).cost() ~ EP</button></td>
          <td><button ~class=EternityGenerator(7).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(7).buyMax()">Max</button></td>
          <td><button ~style.display=EternityAutobuyer(7).hasEternityAutobuyer() ? '' : 'none'~ onclick="EternityAutobuyer(7).toggle()">Auto: ~r EternityAutobuyer(7).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=EternityGenerator(8).isVisible() ? '' : 'none'~>
          <td>Eternity Generator 8</td>
          <td>~f EternityGenerator(8).amount() ~</td>
          <td>~f EternityGenerator(8).perSecond() ~/s</td>
          <td>~f EternityGenerator(8).multiplier() ~x</td>
          <td><button ~class=EternityGenerator(8).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(8).buy()">Cost: ~i EternityGenerator(8).cost() ~ EP</button></td>
          <td><button ~class=EternityGenerator(8).canBuy() ? "" : "disabled"~ onclick="EternityGenerator(8).buyMax()">Max</button></td>
          <td><button ~style.display=EternityAutobuyer(8).hasEternityAutobuyer() ? '' : 'none'~ onclick="EternityAutobuyer(8).toggle()">Auto: ~r EternityAutobuyer(8).isOn() ? "On" : "Off" ~</button></td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'eternity-milestones' ? '' : 'none'~>
      <span>
        You have ~q Eternities.amount() ~ eternit~y Eternities.amount() ~.
        <button ~style.display=EternityMilestones.hasEternityMilestone(4) ? '' : 'none'~ onclick="EternityMilestones.toggleMilestone(4)">Eternity Milestone ~i 4 ~: ~r EternityMilestones.isEternityMilestoneDisabled(4) ? "Disabled" : "Enabled" ~</button>
        <button ~style.display=EternityMilestones.hasEternityMilestone(8) ? '' : 'none'~ onclick="EternityMilestones.toggleMilestone(8)">Eternity Milestone ~i 8 ~: ~r EternityMilestones.isEternityMilestoneDisabled(8) ? "Disabled" : "Enabled" ~</button>
      </span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(1)~>
              ~i 1 ~ eternity
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(1) ~
              <br/>
              Start each ~r PrestigeLayerNames.layersAbove('prestige') ~ with stars based on your eternities (currently ~i EternityStartingBenefits.rawStars() ~)
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(2)~>
              ~i 2 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(2) ~
              <br/>
              Start each ~r PrestigeLayerNames.layersAbove('eternity') ~ with all challenges completed. (You also keep autobuyers and infinity remains broken.)
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(3)~>
              ~i 3 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(3) ~
              <br/>
              Start each ~r PrestigeLayerNames.layersAbove('eternity') ~ with infinity points based on your eternities (currently ~i EternityStartingBenefits.rawInfinityPoints() ~)
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(4)~>
              ~i 4 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(4) ~
              <br/>
              Sacrifice no longer resets anything.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(5)~>
              ~i 5 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(5) ~
              <br/>
              Start each ~r PrestigeLayerNames.layersAbove('eternity') ~ with infinities based on your eternities (currently ~i EternityStartingBenefits.rawInfinities() ~)
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(6)~>
              ~i 6 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(6) ~
              <br/>
              Automatically complete each infinity challenge as soon as you unlock it.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(7)~>
              ~i 7 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(7) ~
              <br/>
              Unlock autobuyers for repeatable infinity upgrades.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(8)~>
              ~i 8 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(8) ~
              <br/>
              Prestige no longer resets anything.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(9)~>
              ~i 9 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(9) ~
              <br/>
              Unlock an Infinity Generator 1 autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(10)~>
              ~i 10 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(10) ~
              <br/>
              Unlock an Infinity Generator 2 autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(11)~>
              ~i 11 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(11) ~
              <br/>
              Unlock an Infinity Generator 3 autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(12)~>
              ~i 12 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(12) ~
              <br/>
              Unlock an Infinity Generator 4 autobuyer.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(13)~>
              ~i 13 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(13) ~
              <br/>
              Unlock an Infinity Generator 5 autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(14)~>
              ~i 14 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(14) ~
              <br/>
              Unlock an Infinity Generator 6 autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(15)~>
              ~i 15 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(15) ~
              <br/>
              Unlock an Infinity Generator 7 autobuyer.
            </div>
          </td>
          <td>
            <div class="eternitymilestonediv" ~style.background=EternityMilestones.color(16)~>
              ~i 16 ~ eternities
              <br/>
              ~r EternityMilestones.milestoneStatusDescription(16) ~
              <br/>
              Unlock an Infinity Generator 8 autobuyer, and an eternity autobuyer.
            </div>
          </td>
        </tr>
      </table>
      <span ~style.display=SpecialTabs.isTabVisible('eternity-producer') ? 'none' : ''~>Completing all eternity milestones for the first time will also let you view the Eternity Producer tab.</span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'studies' ? '' : 'none'~>
      <span>You have ~i Studies.totalTheorems() ~ total theorem~s Studies.totalTheorems() ~ and ~i Studies.unspentTheorems() ~ unspent theorem~s Studies.unspentTheorems() ~.</span>
      <br/>
      <button class="studies-export-button" onclick="Studies.export()">Export studies</button> <button onclick="Studies.import()">Import studies</button>
      <button onclick="Studies.toggleRespec()">Respec studies on next eternity: ~r Studies.isRespecOn() ? "On" : "Off" ~</button>
      <button ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~ ~class=Studies.canMaxFourthRowStudies() ? '' : 'disabled' ~ onclick="Studies.maxFourthRowStudies()">Max fourth-row studies</button>
      <br/>
      <button onclick="Studies.respecAndReset()">Respec studies and ~r EternityPrestigeLayer.resetText() ~</button>
      <br ~style.display=!EternityPrestigeLayer.canEternity() && Studies.canAccessFourthRow() ? '' : 'none'~/>
      <button onclick="Studies.respecFourthRowAndReset()" ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~>Respec fourth-row studies and ~r EternityPrestigeLayer.resetText() ~</button>
      <br/>
      <br/>
      <span>Study options: <button onclick="Studies.changeMode()">Study click mode: ~r Studies.mode() ~</button> <button onclick="Studies.changeCostDisplayMode()">Cost display: ~r Studies.costDisplayMode() ~</button></span>
      <br/>
      <span>Click on the name of a study preset on the line below to load that study list:</span>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;">
        <div ~style.display=Studies.hasPreset(1) ? 'none' : ''~>
          You don't currently have any study presets. You can create presets at the bottom of this tab.
          <br/>
          Presets can be used to load study lists more easily.
        </div>
        <button ~style.display=Studies.hasPreset(1) ? '' : 'none'~ onclick="Studies.presetLoad(1)">~r Studies.presetName(1) ~</button>
        <button ~style.display=Studies.hasPreset(2) ? '' : 'none'~ onclick="Studies.presetLoad(2)">~r Studies.presetName(2) ~</button>
        <button ~style.display=Studies.hasPreset(3) ? '' : 'none'~ onclick="Studies.presetLoad(3)">~r Studies.presetName(3) ~</button>
        <button ~style.display=Studies.hasPreset(4) ? '' : 'none'~ onclick="Studies.presetLoad(4)">~r Studies.presetName(4) ~</button>
        <button ~style.display=Studies.hasPreset(5) ? '' : 'none'~ onclick="Studies.presetLoad(5)">~r Studies.presetName(5) ~</button>
        <button ~style.display=Studies.hasPreset(6) ? '' : 'none'~ onclick="Studies.presetLoad(6)">~r Studies.presetName(6) ~</button>
        <button ~style.display=Studies.hasPreset(7) ? '' : 'none'~ onclick="Studies.presetLoad(7)">~r Studies.presetName(7) ~</button>
        <button ~style.display=Studies.hasPreset(8) ? '' : 'none'~ onclick="Studies.presetLoad(8)">~r Studies.presetName(8) ~</button>
        <button ~style.display=Studies.hasPreset(9) ? '' : 'none'~ onclick="Studies.presetLoad(9)">~r Studies.presetName(9) ~</button>
        <button ~style.display=Studies.hasPreset(10) ? '' : 'none'~ onclick="Studies.presetLoad(10)">~r Studies.presetName(10) ~</button>
        <button ~style.display=Studies.hasPreset(11) ? '' : 'none'~ onclick="Studies.presetLoad(11)">~r Studies.presetName(11) ~</button>
        <button ~style.display=Studies.hasPreset(12) ? '' : 'none'~ onclick="Studies.presetLoad(12)">~r Studies.presetName(12) ~</button>
        <button ~style.display=Studies.hasPreset(13) ? '' : 'none'~ onclick="Studies.presetLoad(13)">~r Studies.presetName(13) ~</button>
        <button ~style.display=Studies.hasPreset(14) ? '' : 'none'~ onclick="Studies.presetLoad(14)">~r Studies.presetName(14) ~</button>
        <button ~style.display=Studies.hasPreset(15) ? '' : 'none'~ onclick="Studies.presetLoad(15)">~r Studies.presetName(15) ~</button>
        <button ~style.display=Studies.hasPreset(16) ? '' : 'none'~ onclick="Studies.presetLoad(16)">~r Studies.presetName(16) ~</button>
        <button ~style.display=Studies.hasPreset(17) ? '' : 'none'~ onclick="Studies.presetLoad(17)">~r Studies.presetName(17) ~</button>
        <button ~style.display=Studies.hasPreset(18) ? '' : 'none'~ onclick="Studies.presetLoad(18)">~r Studies.presetName(18) ~</button>
        <button ~style.display=Studies.hasPreset(19) ? '' : 'none'~ onclick="Studies.presetLoad(19)">~r Studies.presetName(19) ~</button>
        <button ~style.display=Studies.hasPreset(20) ? '' : 'none'~ onclick="Studies.presetLoad(20)">~r Studies.presetName(20) ~</button>
        <button ~style.display=Studies.hasPreset(21) ? '' : 'none'~ onclick="Studies.presetLoad(21)">~r Studies.presetName(21) ~</button>
        <button ~style.display=Studies.hasPreset(22) ? '' : 'none'~ onclick="Studies.presetLoad(22)">~r Studies.presetName(22) ~</button>
        <button ~style.display=Studies.hasPreset(23) ? '' : 'none'~ onclick="Studies.presetLoad(23)">~r Studies.presetName(23) ~</button>
        <button ~style.display=Studies.hasPreset(24) ? '' : 'none'~ onclick="Studies.presetLoad(24)">~r Studies.presetName(24) ~</button>
        <button ~style.display=Studies.hasPreset(25) ? '' : 'none'~ onclick="Studies.presetLoad(25)">~r Studies.presetName(25) ~</button>
        <button ~style.display=Studies.hasPreset(26) ? '' : 'none'~ onclick="Studies.presetLoad(26)">~r Studies.presetName(26) ~</button>
        <button ~style.display=Studies.hasPreset(27) ? '' : 'none'~ onclick="Studies.presetLoad(27)">~r Studies.presetName(27) ~</button>
        <button ~style.display=Studies.hasPreset(28) ? '' : 'none'~ onclick="Studies.presetLoad(28)">~r Studies.presetName(28) ~</button>
        <button ~style.display=Studies.hasPreset(29) ? '' : 'none'~ onclick="Studies.presetLoad(29)">~r Studies.presetName(29) ~</button>
        <button ~style.display=Studies.hasPreset(30) ? '' : 'none'~ onclick="Studies.presetLoad(30)">~r Studies.presetName(30) ~</button>
        <button ~style.display=Studies.hasPreset(31) ? '' : 'none'~ onclick="Studies.presetLoad(31)">~r Studies.presetName(31) ~</button>
        <button ~style.display=Studies.hasPreset(32) ? '' : 'none'~ onclick="Studies.presetLoad(32)">~r Studies.presetName(32) ~</button>
      </div>
      <div ~style.display=Studies.isAutoLoadUnlocked() ? '' : 'none'~>
        Study list to constantly load: <input style="width: 256px;" type="text" ~!value=Studies.studyListToAutoLoad()~ ~!onchange=function() {Studies.setStudyListToAutoLoad(this.value)}~></input> <button onclick="Studies.toggleAutoLoad()">Auto-load: ~r Studies.isAutoLoadOn() ? "On" : "Off" ~</button>
      </div>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 8px 8px; border-collapse: separate;">
        <tr>
          <td>
            <button ~class=Study(1).className()~ onclick="Study(1).click()">
              Study 1
              <br/>
              Double per-boost multiplier
              <br/>
              Currently: ~f Study(1).rawTotalEffect() ~x
              <br/>
              Cost: ~i Study(1).displayCost() ~ theorem~s Study(1).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(2).className()~ onclick="Study(2).click()">
              Study 2
              <br/>
              Multiplier to normal generators based on prestige power
              <br/>
              Currently: ~f Study(2).rawEffect() ~x
              <br/>
              Cost: ~i Study(2).displayCost() ~ theorem~s Study(2).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(3).className()~ onclick="Study(3).click()">
              Study 3
              <br/>
              Multiplier to normal generators based on total stars this complexity
              <br/>
              Currently: ~f Study(3).rawEffect() ~x
              <br/>
              Cost: ~i Study(3).displayCost() ~ theorem~s Study(3).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(4).className()~ onclick="Study(4).click()">
              Study 4
              <br/>
              Multiplier to normal generators based on total theorems
              <br/>
              Currently: ~f Study(4).rawEffect() ~x
              <br/>
              Cost: ~i Study(4).displayCost() ~ theorem~s Study(4).displayCost() ~
            </button>
          </td>
        </tr>
        <tr>
          <td>
            <button ~class=Study(5).className()~ onclick="Study(5).click()">
              Study 5
              <br/>
              Multiplier to infinity generators based on number of boosts
              <br/>
              Currently: ~f Study(5).rawEffect() ~x
              <br/>
              Cost: ~i Study(5).displayCost() ~ theorem~s Study(5).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(6).className()~ onclick="Study(6).click()">
              Study 6
              <br/>
              Multiplier to infinity generators based on prestige power
              <br/>
              Currently: ~f Study(6).rawEffect() ~x
              <br/>
              Cost: ~i Study(6).displayCost() ~ theorem~s Study(6).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(7).className()~ onclick="Study(7).click()">
              Study 7
              <br/>
              Multiplier to infinity generators based on eternities
              <br/>
              ~r Study(7).cappedText() ~: ~f Study(7).rawEffect() ~x
              <br/>
              Cost: ~i Study(7).displayCost() ~ theorem~s Study(7).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(8).className()~ onclick="Study(8).click()">
              Study 8
              <br/>
              Multiplier to infinity generators based on total theorems
              <br/>
              Currently: ~f Study(8).rawEffect() ~x
              <br/>
              Cost: ~i Study(8).displayCost() ~ theorem~s Study(8).displayCost() ~
            </button>
          </td>
        </tr>
        <tr>
          <td>
            <button ~class=Study(9).className()~ onclick="Study(9).click()">
              Study 9
              <br/>
              Eternity generators are multiplied by <span ~style.display=InfinityChallenge.isInfinityChallengeRunning(7) ? '' : 'none'~>square root of</span> per-boost multiplier
              <br/>
              Currently: ~f Study(9).rawEffect() ~x
              <br/>
              Cost: ~i Study(9).displayCost() ~ theorem~s Study(9).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(10).className()~ onclick="Study(10).click()">
              Study 10
              <br/>
              Multiplier to eternity generators based on prestige power
              <br/>
              Currently: ~f Study(10).rawEffect() ~x
              <br/>
              Cost: ~i Study(10).displayCost() ~ theorem~s Study(10).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(11).className()~ onclick="Study(11).click()">
              Study 11
              <br/>
              Multiplier to eternity generators based on eternity stars and time in eternity
              <br/>
              ~r Study(11).cappedText() ~: ~f Study(11).rawEffect() ~x
              <br/>
              Cost: ~i Study(11).displayCost() ~ theorem~s Study(11).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(12).className()~ onclick="Study(12).click()">
              Study 12
              <br/>
              Multiplier to eternity generators based on total theorems
              <br/>
              Currently: ~f Study(12).rawEffect() ~x
              <br/>
              Cost: ~i Study(12).displayCost() ~ theorem~s Study(12).displayCost() ~
            </button>
          </td>
        </tr>
        <tr ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~>
          <td>
            <button ~class=Study(13).className()~ onclick="Study(13).click()">
              Study 13
              <br/>
              Large fixed multiplier to normal generators
              <br/>
              Currently: ~f Study(13).effect() ~x
              <br/>
              Next: ~f Study(13).nextEffect() ~x
              <br/>
              Cost: ~i Study(13).displayCost() ~ theorem~s Study(13).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(14).className()~ onclick="Study(14).click()">
              Study 14
              <br/>
              Multiplier to infinity generators based on total color value
              <br/>
              Currently: ~f Study(14).effect() ~x
              <br/>
              Next: ~f Study(14).nextEffect() ~x
              <br/>
              Cost: ~i Study(14).displayCost() ~ theorem~s Study(14).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(15).className()~ onclick="Study(15).click()">
              Study 15
              <br/>
              Eternity generators are multiplied by chroma
              <br/>
              Currently: ~f Study(15).effect() ~x
              <br/>
              Next: ~f Study(15).nextEffect() ~x
              <br/>
              Cost: ~i Study(15).displayCost() ~ theorem~s Study(15).displayCost() ~
            </button>
          </td>
          <td>
            <button ~class=Study(16).className()~ onclick="Study(16).click()">
              Study 16
              <br/>
              Multiplier to chroma buildup speed based on total theorems
              <br/>
              Currently: ~f Study(16).effect() ~x
              <br/>
              Next: ~f Study(16).nextEffect() ~x
              <br/>
              Cost: ~i Study(16).displayCost() ~ theorem~s Study(16).displayCost() ~
            </button>
          </td>
        </tr>
      </table>
      <span ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~ class="greenspan">
        There is also a small multiplier to the chroma cap based on total fourth-row study purchases (currently ~r formatWithPrecision(Studies.chromaCapMultiplier(), 5) ~x).
      </span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 8px 0px; border-collapse: separate;">
        <tr>
          <td style="text-align: center;">
            You have ~f Stars.amount() ~ stars.
          </td>
          <td style="text-align: center;">
            You have ~i InfinityPoints.amount() ~ IP.
          </td>
          <td style="text-align: center;">
            You have ~i EternityPoints.amount() ~ EP.
          </td>
        </tr>
        <tr>
          <td>
            <button ~class=Studies.canBuy(0) ? '' : 'disabled'~ style="width: 320px; height: 96px;" onclick="Studies.buy(0)">
              Buy a theorem with stars
              <br/>
              Cost: ~i Studies.cost(0) ~ stars
            </button>
          </td>
          <td>
            <button ~class=Studies.canBuy(1) ? '' : 'disabled'~ style="width: 320px; height: 96px;" onclick="Studies.buy(1)">
              Buy a theorem with infinity points
              <br/>
              Cost: ~i Studies.cost(1) ~ IP
            </button>
          </td>
          <td>
            <button ~class=Studies.canBuy(2) ? '' : 'disabled'~ style="width: 320px; height: 96px;" onclick="Studies.buy(2)">
              Buy a theorem with eternity points
              <br/>
              Cost: ~i Studies.cost(2) ~ EP
            </button>
          </td>
        </tr>
        <tr>
          <td>
            <button ~class=Studies.canBuy(0) ? '' : 'disabled'~ style="width: 320px; height: 48px;" onclick="Studies.buyMax(0)">
              Buy max theorems with stars
            </button>
          </td>
          <td>
            <button ~class=Studies.canBuy(1) ? '' : 'disabled'~ style="width: 320px; height: 48px;" onclick="Studies.buyMax(1)">
              Buy max theorems with infinity points
            </button>
          </td>
          <td>
            <button ~class=Studies.canBuy(2) ? '' : 'disabled'~ style="width: 320px; height: 48px;" onclick="Studies.buyMax(2)">
              Buy max theorems with eternity points
            </button>
          </td>
        </tr>
        <tr ~style.display=EternityAutobuyers.hasTheoremAutobuyers() ? '' : 'none'~>
          <td>
            <button style="width: 320px; height: 48px;" onclick="EternityAutobuyer(14).toggle()">
              Auto buy theorems with stars: ~r EternityAutobuyer(14).isOn() ? "On" : "Off" ~
            </button>
          </td>
          <td>
            <button style="width: 320px; height: 48px;" onclick="EternityAutobuyer(15).toggle()">
              Auto buy theorems with infinity points: ~r EternityAutobuyer(15).isOn() ? "On" : "Off" ~
            </button>
          </td>
          <td>
            <button style="width: 320px; height: 48px;" onclick="EternityAutobuyer(16).toggle()">
              Auto buy theorems with eternity points: ~r EternityAutobuyer(16).isOn() ? "On" : "Off" ~
            </button>
          </td>
        </tr>
      </table>
      <span>
        Buying a study will increase the costs of all studies on other rows by ~i 2 ~ theorems.
      </span>
      <br/>
      <span>
        Despite this, the total cost of studies does not depend on the order you buy them in.
      </span>
      <br ~style.display=Trivia.show('EG requirement for theorems') ? '' : 'none'~/>
      <span ~style.display=Trivia.show('EG requirement for theorems') ? '' : 'none'~>
        You need to buy at least one eternity generator before you can buy theorems with eternity points.
      </span>
      <br/>
      <span>
        After ~i 4 ~ theorem purchases of a certain type, theorem costs of that type start increasing far more quickly.
      </span>
      <br/>
      <div ~style.display=Studies.canAccessFourthRow() ? 'none' : ''~>
        <span>
          After you get ~f Studies.totalStudyCost() ~ theorems (enough to buy all the studies), a fourth row will appear.
        </span>
        <br/>
        <span>
          However, studies in this row can only be bought if all studies above are bought.
        </span>
      </div>
      <div ~style.display=Studies.canAccessFourthRow() ? '' : 'none'~>
        <span>
          Studies on the fourth row are rebuyable, with increasing costs. Their costs are unaffected by buying other studies. Their shown costs are always the cost of the next purchase.
        </span>
        <br/>
        <span>
          However, they can only be bought if all studies above are bought.
        </span>
      </div>
      <br/>
      <span>Presets:</span>
      <br/>
      <div ~style.display=Studies.hasPreset(1) ? '' : 'none'~>
        Name: <input class="presetname1" type="text" ~!value=Studies.presetName(1)~ ~!onchange=function() {Studies.setPresetName(1, this.value)}~></input>
        Study list: <input class="presetstudylist1" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(1)~ ~!onchange=function() {Studies.setPresetStudyList(1, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(1)">Set to current studies</button>
        <button onclick="Studies.presetLoad(1)">Load</button>
        <button onclick="Studies.presetDelete(1)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(2) ? '' : 'none'~>
        Name: <input class="presetname2" type="text" ~!value=Studies.presetName(2)~ ~!onchange=function() {Studies.setPresetName(2, this.value)}~></input>
        Study list: <input class="presetstudylist2" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(2)~ ~!onchange=function() {Studies.setPresetStudyList(2, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(2)">Set to current studies</button>
        <button onclick="Studies.presetLoad(2)">Load</button>
        <button onclick="Studies.presetDelete(2)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(3) ? '' : 'none'~>
        Name: <input class="presetname3" type="text" ~!value=Studies.presetName(3)~ ~!onchange=function() {Studies.setPresetName(3, this.value)}~></input>
        Study list: <input class="presetstudylist3" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(3)~ ~!onchange=function() {Studies.setPresetStudyList(3, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(3)">Set to current studies</button>
        <button onclick="Studies.presetLoad(3)">Load</button>
        <button onclick="Studies.presetDelete(3)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(4) ? '' : 'none'~>
        Name: <input class="presetname4" type="text" ~!value=Studies.presetName(4)~ ~!onchange=function() {Studies.setPresetName(4, this.value)}~></input>
        Study list: <input class="presetstudylist4" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(4)~ ~!onchange=function() {Studies.setPresetStudyList(4, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(4)">Set to current studies</button>
        <button onclick="Studies.presetLoad(4)">Load</button>
        <button onclick="Studies.presetDelete(4)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(5) ? '' : 'none'~>
        Name: <input class="presetname5" type="text" ~!value=Studies.presetName(5)~ ~!onchange=function() {Studies.setPresetName(5, this.value)}~></input>
        Study list: <input class="presetstudylist5" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(5)~ ~!onchange=function() {Studies.setPresetStudyList(5, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(5)">Set to current studies</button>
        <button onclick="Studies.presetLoad(5)">Load</button>
        <button onclick="Studies.presetDelete(5)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(6) ? '' : 'none'~>
        Name: <input class="presetname6" type="text" ~!value=Studies.presetName(6)~ ~!onchange=function() {Studies.setPresetName(6, this.value)}~></input>
        Study list: <input class="presetstudylist6" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(6)~ ~!onchange=function() {Studies.setPresetStudyList(6, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(6)">Set to current studies</button>
        <button onclick="Studies.presetLoad(6)">Load</button>
        <button onclick="Studies.presetDelete(6)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(7) ? '' : 'none'~>
        Name: <input class="presetname7" type="text" ~!value=Studies.presetName(7)~ ~!onchange=function() {Studies.setPresetName(7, this.value)}~></input>
        Study list: <input class="presetstudylist7" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(7)~ ~!onchange=function() {Studies.setPresetStudyList(7, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(7)">Set to current studies</button>
        <button onclick="Studies.presetLoad(7)">Load</button>
        <button onclick="Studies.presetDelete(7)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(8) ? '' : 'none'~>
        Name: <input class="presetname8" type="text" ~!value=Studies.presetName(8)~ ~!onchange=function() {Studies.setPresetName(8, this.value)}~></input>
        Study list: <input class="presetstudylist8" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(8)~ ~!onchange=function() {Studies.setPresetStudyList(8, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(8)">Set to current studies</button>
        <button onclick="Studies.presetLoad(8)">Load</button>
        <button onclick="Studies.presetDelete(8)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(9) ? '' : 'none'~>
        Name: <input class="presetname9" type="text" ~!value=Studies.presetName(9)~ ~!onchange=function() {Studies.setPresetName(9, this.value)}~></input>
        Study list: <input class="presetstudylist9" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(9)~ ~!onchange=function() {Studies.setPresetStudyList(9, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(9)">Set to current studies</button>
        <button onclick="Studies.presetLoad(9)">Load</button>
        <button onclick="Studies.presetDelete(9)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(10) ? '' : 'none'~>
        Name: <input class="presetname10" type="text" ~!value=Studies.presetName(10)~ ~!onchange=function() {Studies.setPresetName(10, this.value)}~></input>
        Study list: <input class="presetstudylist10" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(10)~ ~!onchange=function() {Studies.setPresetStudyList(10, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(10)">Set to current studies</button>
        <button onclick="Studies.presetLoad(10)">Load</button>
        <button onclick="Studies.presetDelete(10)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(11) ? '' : 'none'~>
        Name: <input class="presetname11" type="text" ~!value=Studies.presetName(11)~ ~!onchange=function() {Studies.setPresetName(11, this.value)}~></input>
        Study list: <input class="presetstudylist11" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(11)~ ~!onchange=function() {Studies.setPresetStudyList(11, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(11)">Set to current studies</button>
        <button onclick="Studies.presetLoad(11)">Load</button>
        <button onclick="Studies.presetDelete(11)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(12) ? '' : 'none'~>
        Name: <input class="presetname12" type="text" ~!value=Studies.presetName(12)~ ~!onchange=function() {Studies.setPresetName(12, this.value)}~></input>
        Study list: <input class="presetstudylist12" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(12)~ ~!onchange=function() {Studies.setPresetStudyList(12, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(12)">Set to current studies</button>
        <button onclick="Studies.presetLoad(12)">Load</button>
        <button onclick="Studies.presetDelete(12)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(13) ? '' : 'none'~>
        Name: <input class="presetname13" type="text" ~!value=Studies.presetName(13)~ ~!onchange=function() {Studies.setPresetName(13, this.value)}~></input>
        Study list: <input class="presetstudylist13" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(13)~ ~!onchange=function() {Studies.setPresetStudyList(13, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(13)">Set to current studies</button>
        <button onclick="Studies.presetLoad(13)">Load</button>
        <button onclick="Studies.presetDelete(13)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(14) ? '' : 'none'~>
        Name: <input class="presetname14" type="text" ~!value=Studies.presetName(14)~ ~!onchange=function() {Studies.setPresetName(14, this.value)}~></input>
        Study list: <input class="presetstudylist14" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(14)~ ~!onchange=function() {Studies.setPresetStudyList(14, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(14)">Set to current studies</button>
        <button onclick="Studies.presetLoad(14)">Load</button>
        <button onclick="Studies.presetDelete(14)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(15) ? '' : 'none'~>
        Name: <input class="presetname15" type="text" ~!value=Studies.presetName(15)~ ~!onchange=function() {Studies.setPresetName(15, this.value)}~></input>
        Study list: <input class="presetstudylist15" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(15)~ ~!onchange=function() {Studies.setPresetStudyList(15, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(15)">Set to current studies</button>
        <button onclick="Studies.presetLoad(15)">Load</button>
        <button onclick="Studies.presetDelete(15)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(16) ? '' : 'none'~>
        Name: <input class="presetname16" type="text" ~!value=Studies.presetName(16)~ ~!onchange=function() {Studies.setPresetName(16, this.value)}~></input>
        Study list: <input class="presetstudylist16" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(16)~ ~!onchange=function() {Studies.setPresetStudyList(16, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(16)">Set to current studies</button>
        <button onclick="Studies.presetLoad(16)">Load</button>
        <button onclick="Studies.presetDelete(16)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(17) ? '' : 'none'~>
        Name: <input class="presetname17" type="text" ~!value=Studies.presetName(17)~ ~!onchange=function() {Studies.setPresetName(17, this.value)}~></input>
        Study list: <input class="presetstudylist17" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(17)~ ~!onchange=function() {Studies.setPresetStudyList(17, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(17)">Set to current studies</button>
        <button onclick="Studies.presetLoad(17)">Load</button>
        <button onclick="Studies.presetDelete(17)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(18) ? '' : 'none'~>
        Name: <input class="presetname18" type="text" ~!value=Studies.presetName(18)~ ~!onchange=function() {Studies.setPresetName(18, this.value)}~></input>
        Study list: <input class="presetstudylist18" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(18)~ ~!onchange=function() {Studies.setPresetStudyList(18, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(18)">Set to current studies</button>
        <button onclick="Studies.presetLoad(18)">Load</button>
        <button onclick="Studies.presetDelete(18)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(19) ? '' : 'none'~>
        Name: <input class="presetname19" type="text" ~!value=Studies.presetName(19)~ ~!onchange=function() {Studies.setPresetName(19, this.value)}~></input>
        Study list: <input class="presetstudylist19" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(19)~ ~!onchange=function() {Studies.setPresetStudyList(19, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(19)">Set to current studies</button>
        <button onclick="Studies.presetLoad(19)">Load</button>
        <button onclick="Studies.presetDelete(19)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(20) ? '' : 'none'~>
        Name: <input class="presetname20" type="text" ~!value=Studies.presetName(20)~ ~!onchange=function() {Studies.setPresetName(20, this.value)}~></input>
        Study list: <input class="presetstudylist20" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(20)~ ~!onchange=function() {Studies.setPresetStudyList(20, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(20)">Set to current studies</button>
        <button onclick="Studies.presetLoad(20)">Load</button>
        <button onclick="Studies.presetDelete(20)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(21) ? '' : 'none'~>
        Name: <input class="presetname21" type="text" ~!value=Studies.presetName(21)~ ~!onchange=function() {Studies.setPresetName(21, this.value)}~></input>
        Study list: <input class="presetstudylist21" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(21)~ ~!onchange=function() {Studies.setPresetStudyList(21, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(21)">Set to current studies</button>
        <button onclick="Studies.presetLoad(21)">Load</button>
        <button onclick="Studies.presetDelete(21)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(22) ? '' : 'none'~>
        Name: <input class="presetname22" type="text" ~!value=Studies.presetName(22)~ ~!onchange=function() {Studies.setPresetName(22, this.value)}~></input>
        Study list: <input class="presetstudylist22" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(22)~ ~!onchange=function() {Studies.setPresetStudyList(22, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(22)">Set to current studies</button>
        <button onclick="Studies.presetLoad(22)">Load</button>
        <button onclick="Studies.presetDelete(22)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(23) ? '' : 'none'~>
        Name: <input class="presetname23" type="text" ~!value=Studies.presetName(23)~ ~!onchange=function() {Studies.setPresetName(23, this.value)}~></input>
        Study list: <input class="presetstudylist23" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(23)~ ~!onchange=function() {Studies.setPresetStudyList(23, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(23)">Set to current studies</button>
        <button onclick="Studies.presetLoad(23)">Load</button>
        <button onclick="Studies.presetDelete(23)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(24) ? '' : 'none'~>
        Name: <input class="presetname24" type="text" ~!value=Studies.presetName(24)~ ~!onchange=function() {Studies.setPresetName(24, this.value)}~></input>
        Study list: <input class="presetstudylist24" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(24)~ ~!onchange=function() {Studies.setPresetStudyList(24, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(24)">Set to current studies</button>
        <button onclick="Studies.presetLoad(24)">Load</button>
        <button onclick="Studies.presetDelete(24)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(25) ? '' : 'none'~>
        Name: <input class="presetname25" type="text" ~!value=Studies.presetName(25)~ ~!onchange=function() {Studies.setPresetName(25, this.value)}~></input>
        Study list: <input class="presetstudylist25" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(25)~ ~!onchange=function() {Studies.setPresetStudyList(25, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(25)">Set to current studies</button>
        <button onclick="Studies.presetLoad(25)">Load</button>
        <button onclick="Studies.presetDelete(25)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(26) ? '' : 'none'~>
        Name: <input class="presetname26" type="text" ~!value=Studies.presetName(26)~ ~!onchange=function() {Studies.setPresetName(26, this.value)}~></input>
        Study list: <input class="presetstudylist26" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(26)~ ~!onchange=function() {Studies.setPresetStudyList(26, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(26)">Set to current studies</button>
        <button onclick="Studies.presetLoad(26)">Load</button>
        <button onclick="Studies.presetDelete(26)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(27) ? '' : 'none'~>
        Name: <input class="presetname27" type="text" ~!value=Studies.presetName(27)~ ~!onchange=function() {Studies.setPresetName(27, this.value)}~></input>
        Study list: <input class="presetstudylist27" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(27)~ ~!onchange=function() {Studies.setPresetStudyList(27, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(27)">Set to current studies</button>
        <button onclick="Studies.presetLoad(27)">Load</button>
        <button onclick="Studies.presetDelete(27)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(28) ? '' : 'none'~>
        Name: <input class="presetname28" type="text" ~!value=Studies.presetName(28)~ ~!onchange=function() {Studies.setPresetName(28, this.value)}~></input>
        Study list: <input class="presetstudylist28" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(28)~ ~!onchange=function() {Studies.setPresetStudyList(28, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(28)">Set to current studies</button>
        <button onclick="Studies.presetLoad(28)">Load</button>
        <button onclick="Studies.presetDelete(28)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(29) ? '' : 'none'~>
        Name: <input class="presetname29" type="text" ~!value=Studies.presetName(29)~ ~!onchange=function() {Studies.setPresetName(29, this.value)}~></input>
        Study list: <input class="presetstudylist29" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(29)~ ~!onchange=function() {Studies.setPresetStudyList(29, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(29)">Set to current studies</button>
        <button onclick="Studies.presetLoad(29)">Load</button>
        <button onclick="Studies.presetDelete(29)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(30) ? '' : 'none'~>
        Name: <input class="presetname30" type="text" ~!value=Studies.presetName(30)~ ~!onchange=function() {Studies.setPresetName(30, this.value)}~></input>
        Study list: <input class="presetstudylist30" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(30)~ ~!onchange=function() {Studies.setPresetStudyList(30, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(30)">Set to current studies</button>
        <button onclick="Studies.presetLoad(30)">Load</button>
        <button onclick="Studies.presetDelete(30)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(31) ? '' : 'none'~>
        Name: <input class="presetname31" type="text" ~!value=Studies.presetName(31)~ ~!onchange=function() {Studies.setPresetName(31, this.value)}~></input>
        Study list: <input class="presetstudylist31" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(31)~ ~!onchange=function() {Studies.setPresetStudyList(31, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(31)">Set to current studies</button>
        <button onclick="Studies.presetLoad(31)">Load</button>
        <button onclick="Studies.presetDelete(31)">Delete</button>
      </div>
      <div ~style.display=Studies.hasPreset(32) ? '' : 'none'~>
        Name: <input class="presetname32" type="text" ~!value=Studies.presetName(32)~ ~!onchange=function() {Studies.setPresetName(32, this.value)}~></input>
        Study list: <input class="presetstudylist32" style="width: 256px;" type="text" ~!value=Studies.presetStudyList(32)~ ~!onchange=function() {Studies.setPresetStudyList(32, this.value)}~></input>
        <button onclick="Studies.presetSetToCurrentStudies(32)">Set to current studies</button>
        <button onclick="Studies.presetLoad(32)">Load</button>
        <button onclick="Studies.presetDelete(32)">Delete</button>
      </div>
      <span>
        <button ~style.display=Studies.hasPreset(32) ? 'none' : ''~ onclick="Studies.presetCreate()">Create a preset</button>
        <span ~style.display=Studies.hasPreset(32) ? '' : 'none'~>You can create at most ~i 32 ~ presets. Delete existing presets to create more.</span>
      </span>
      <br/>
      <span style="display: none;">Exported studies (also copied to clipboard): <input id="study-export-output"></input></span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'eternity-producer' ? '' : 'none'~>
      <div ~style.display=EternityProducer.isUnlocked() ? 'none' : ''~>
        <button style="height: 48px;" onclick="EternityProducer.unlock()" ~class=EternityProducer.canUnlock() ? '' : 'disabled'~>
          Unlock the Eternity Producer<br/>Cost: ~f EternityProducer.unlockCost() ~ eternity points
        </button>
        <br/>
        <span>The Eternity Producer, when unlocked, will produce ~q EternityProducer.rawProductionPerSecond() ~ eternit~y EternityProducer.rawProductionPerSecond() ~ per second.</span>
        <br/>
        <span>It will also multiply all eternity generators by ~f EternityProducer.rawMultiplier() ~ (based on eternities).</span>
        <br/>
        <span>It can be improved via upgrades.</span>
        <br ~style.display=SpecialTabs.isTabVisible('eternity-challenges') ? 'none' : ''~/>
        <span ~style.display=SpecialTabs.isTabVisible('eternity-challenges') ? 'none' : ''~>Unlocking the Eternity Producer for the first time will also let you view the Eternity Challenges tab.</span>
      </div>
      <div ~style.display=EternityProducer.isUnlocked() ? '' : 'none'~>
        <span>You have ~q Eternities.amount() ~ eternit~y Eternities.amount() ~. Due to the Eternity Producer, they multiply all eternity generators by ~f EternityProducer.multiplier() ~.</span>
        <br/>
        <span>The Eternity Producer is producing ~q EternityProducer.productionPerSecond() ~ eternit~y EternityProducer.productionPerSecond() ~ per second.</span>
        <br/>
        <br/>
        <span>You have ~i EternityPoints.amount() ~ eternity point~s EternityPoints.amount() ~. <button ~class=EternityProducer.anythingToBuy() ? "" : "disabled"~ onclick="EternityProducer.maxAll()">Max Eternity Producer upgrades</button></span>
        <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
          <tr>
            <td>Eternity Producer base production per second:</td>
            <td><span ~style.display=EternityProducerUpgrade(1).atBoughtLimit() ? 'none' : ''~>~i EternityProducerUpgrade(1).effect() ~ → ~i EternityProducerUpgrade(1).nextEffect() ~</span><span ~style.display=EternityProducerUpgrade(1).atBoughtLimit() ? '' : 'none'~>~i EternityProducerUpgrade(1).effect() ~ (maxed)</span></td>
            <td><span ~style.display=EternityProducerUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=EternityProducerUpgrade(1).canBuy() ? "" : "disabled"~ onclick="EternityProducerUpgrade(1).buy()">Cost: ~i EternityProducerUpgrade(1).cost() ~ EP</button></span></td>
            <td><span ~style.display=EternityProducerUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=EternityProducerUpgrade(1).canBuy() ? "" : "disabled"~ onclick="EternityProducerUpgrade(1).buyMax()">Max</button></span></td>
            <td><span ~style.display=EternityAutobuyer(12).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(12).toggle()">Auto: ~r EternityAutobuyer(12).isOn() ? "On" : "Off" ~</button></span></td>
          </tr>
          <tr>
            <td>Eternity Producer multiplier to EGs:</td>
            <td><span ~style.display=EternityProducerUpgrade(2).atBoughtLimit() ? 'none' : ''~>~f EternityProducerUpgrade(2).effect() ~ → ~f EternityProducerUpgrade(2).nextEffect() ~</span><span ~style.display=EternityProducerUpgrade(2).atBoughtLimit() ? '' : 'none'~>~f EternityProducerUpgrade(2).effect() ~ (maxed)</span></td>
            <td><span ~style.display=EternityProducerUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=EternityProducerUpgrade(2).canBuy() ? "" : "disabled"~ onclick="EternityProducerUpgrade(2).buy()">Cost: ~i EternityProducerUpgrade(2).cost() ~ EP</button></span></td>
            <td><span ~style.display=EternityProducerUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=EternityProducerUpgrade(2).canBuy() ? "" : "disabled"~ onclick="EternityProducerUpgrade(2).buyMax()">Max</button></span></td>
            <td><span ~style.display=EternityAutobuyer(13).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(13).toggle()">Auto: ~r EternityAutobuyer(13).isOn() ? "On" : "Off" ~</button></span></td>
          </tr>
        </table>
        <br/>
        <div ~style.display=Permanence.hasGainedPermanence() ? '' : 'none'~>
          <span>You have ~f Permanence.amount() ~ permanence. You get ~r Permanence.conversionText() ~. <button ~class=Permanence.anythingToBuy() ? "" : "disabled"~ onclick="Permanence.maxAll()">Max permanence upgrades</button></span>
          <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
            <tr>
              <td>Multiplier to eternity gain:</td>
              <td><span ~style.display=PermanenceUpgrade(1).atBoughtLimit() ? 'none' : ''~>~i PermanenceUpgrade(1).effect() ~ → ~i PermanenceUpgrade(1).nextEffect() ~</span><span ~style.display=PermanenceUpgrade(1).atBoughtLimit() ? '' : 'none'~>~i PermanenceUpgrade(1).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PermanenceUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(1).buy()">Cost: ~i PermanenceUpgrade(1).cost() ~ permanence</button></span></td>
              <td><span ~style.display=PermanenceUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(1).buyMax()">Max</button></span></td>
              <td><span ~style.display=EternityAutobuyer(17).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(17).toggle()">Auto: ~r EternityAutobuyer(17).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td>Power to Eternity Producer multiplier to EGs:</td>
              <td><span ~style.display=PermanenceUpgrade(2).atBoughtLimit() ? 'none' : ''~>~f PermanenceUpgrade(2).effect() ~ → ~f PermanenceUpgrade(2).nextEffect() ~</span><span ~style.display=PermanenceUpgrade(2).atBoughtLimit() ? '' : 'none'~>~f PermanenceUpgrade(2).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PermanenceUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(2).buy()">Cost: ~i PermanenceUpgrade(2).cost() ~ permanence</button></span></td>
              <td><span ~style.display=PermanenceUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(2).buyMax()">Max</button></span></td>
              <td><span ~style.display=EternityAutobuyer(18).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(18).toggle()">Auto: ~r EternityAutobuyer(18).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td>Power to third-row study effects:</td>
              <td><span ~style.display=PermanenceUpgrade(3).atBoughtLimit() ? 'none' : ''~>~f PermanenceUpgrade(3).effect() ~ → ~f PermanenceUpgrade(3).nextEffect() ~</span><span ~style.display=PermanenceUpgrade(3).atBoughtLimit() ? '' : 'none'~>~f PermanenceUpgrade(3).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PermanenceUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(3).buy()">Cost: ~i PermanenceUpgrade(3).cost() ~ permanence</button></span></td>
              <td><span ~style.display=PermanenceUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(3).buyMax()">Max</button></span></td>
              <td><span ~style.display=EternityAutobuyer(19).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(19).toggle()">Auto: ~r EternityAutobuyer(19).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td>Multiplier to permanence based on eternity stars:</td>
              <td><span ~style.display=PermanenceUpgrade(4).atBoughtLimit() ? 'none' : ''~>~f PermanenceUpgrade(4).effect() ~ → ~f PermanenceUpgrade(4).nextEffect() ~</span><span ~style.display=PermanenceUpgrade(4).atBoughtLimit() ? '' : 'none'~>~f PermanenceUpgrade(4).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PermanenceUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(4).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(4).buy()">Cost: ~i PermanenceUpgrade(4).cost() ~ permanence</button></span></td>
              <td><span ~style.display=PermanenceUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=PermanenceUpgrade(4).canBuy() ? "" : "disabled"~ onclick="PermanenceUpgrade(4).buyMax()">Max</button></span></td>
              <td><span ~style.display=EternityAutobuyer(20).hasEternityAutobuyer() ? '' : 'none'~><button onclick="EternityAutobuyer(20).toggle()">Auto: ~r EternityAutobuyer(20).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
          </table>
        </div>
        <span ~style.display=Permanence.canGainPermanence() ? '' : 'none'~><button style="height: 48px;" onclick="Permanence.gainPermanence()">Lose all but ~i Permanence.getLeftoverEternities() ~ eternities,<br/>but gain ~f Permanence.permanenceGain() ~ permanence.</button></span>
        <span ~style.display=Permanence.canGainPermanence() ? 'none' : ''~>You need ~f Permanence.getRequiredEternities() ~ eternities to gain permanence.<span ~style.display=Permanence.hasGainedPermanence() ? 'none' : ''~> Permanence can be spent on a variety of upgrades.</span></span>
        <br ~style.display=Permanence.hasGainedPermanence() ? 'none' : ''~/>
        <span ~style.display=Permanence.hasGainedPermanence() ? 'none' : ''~>You get ~r Permanence.conversionText() ~.</span>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'eternity-challenges' ? '' : 'none'~>
      <span>You have completed ~i EternityChallenge.getTotalEternityChallengeCompletions() ~ eternity challenge (EC) tier~s EternityChallenge.getTotalEternityChallengeCompletions() ~, giving you ~i EternityChallenge.extraTheoremsActualAndDisplay() ~ extra theorem~s EternityChallenge.extraTheoremsActualAndDisplay() ~ (~i 1 ~ per tier).</span>
      <br/>
      <span>
        <button ~style.display=EternityChallenge.canRespec() ? '' : 'none'~ onclick="EternityChallenge.toggleRespec()">Respec eternity challenge on next eternity: ~r EternityChallenge.isRespecOn() ? "On" : "Off" ~</button>
        <button ~style.display=EternityChallenge.showRequirementDisplayToggle() ? '' : 'none'~ onclick="EternityChallenge.toggleRequirementDisplay()">Show (now unneeded) eternity challenge requirements: ~r EternityChallenge.isRequirementDisplayOn() ? "On" : "Off" ~</button>
      </span>
      <div ~style.display=EternityChallenge.showAutoECCompletion() ? '' : 'none'~>
        <span>You auto-complete an EC tier once every ~tq EternityChallenge.autoECCompletionTime() ~, <span ~style.display=EternityChallenge.areAllEternityChallengesCompleted() ? 'none' : ''~>next in ~t EternityChallenge.timeUntilAutoECCompletion() ~</span><span ~style.display=EternityChallenge.areAllEternityChallengesCompleted() ? '' : 'none'~>and they're now fully complete</span><span ~style.display=EternityChallenge.usedAutoECCompletionThisComplexity() ? 'none' : ''~>  (no auto-completions this complexity)</span>.</span>
        <br/>
        <span ~style.display=!EternityChallenge.isAutoECCompletionOn() && EternityChallenge.imminentAutoECCompletionTiers() !== 0 ? '' : 'none'~>Turning auto-EC completion on would complete ~i EternityChallenge.imminentAutoECCompletionTiers() ~ eternity challenge tier~s EternityChallenge.imminentAutoECCompletionTiers() ~.</span>
        <br ~style.display=!EternityChallenge.isAutoECCompletionOn() && EternityChallenge.imminentAutoECCompletionTiers() !== 0 ? '' : 'none'~/>
        <button onclick="EternityChallenge.toggleAutoECCompletion()">Auto-EC completion: ~r EternityChallenge.isAutoECCompletionOn() ? "On" : "Off" ~</button>
      </div>
      <br ~style.display=EternityChallenge.showAutoECCompletion() ? 'none' : ''~/>
      <span>
        At ~i EternityChallenge.getTotalCompletionsRewardThreshold(1) ~ total eternity challenge tiers completed:
      </span>
      <br/>
      <span>
        Multiplier to boost power gain based on eternity challenge tiers completed (~q EternityChallenge.getTotalCompletionsRewardRawEffect(1) ~)
      </span>
      <br/>
      <span>
        At ~i EternityChallenge.getTotalCompletionsRewardThreshold(2) ~ total eternity challenge tiers completed:
      </span>
      <br/>
      <span>
        Multiplier to eternity gain based on eternity challenge tiers completed (~q EternityChallenge.getTotalCompletionsRewardRawEffect(2) ~)
      </span>
      <br/>
      <span>
        At ~i EternityChallenge.getTotalCompletionsRewardThreshold(3) ~ total eternity challenge tiers completed:
      </span>
      <br/>
      <span>
        You gain your infinity points on infinity every second, without needing to infinity (IP generation)<span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? 'none' : ''~>, and you can view the Chroma tab</span>.
      </span>
      <br/>
      <span>
        At ~i EternityChallenge.getTotalCompletionsRewardThreshold(4) ~ total eternity challenge tiers completed:
      </span>
      <br/>
      <span>
        ~r EternityChallenge.eternityChallengeTotalCompletionsReward4Text() ~
      </span>
      <br/>
      <span ~style.display=EternityChallenge.canRespec() ? '' : 'none'~>
        <button onclick="EternityChallenge.respecAndReset()">Respec eternity challenge and ~r EternityPrestigeLayer.resetText() ~</button>
      </span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(1)~>
              <span>Eternity Challenge 1</span>
              <br/>
              <span>There are exponents on all normal generators multipliers based on infinity stars and on all infinity generator multipliers based on eternity stars (both less than ~i 1 ~).</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(1) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(1) ~ theorem~s EternityChallenge.getEternityChallengeCost(1) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(1) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(1) ~</span>
              <br/>
              <span><button onclick="EternityChallenge.pressEternityChallengeButton(1)">~r EternityChallenge.eternityChallengeButtonText(1) ~</button></span>
              <br/>
              <span>Reward: Multiplier to normal generators based on stars.</span>
              <br/>
              <span>Current: ~f EternityChallenge.getEternityChallengeReward(1) ~x<span ~style.display=EternityChallenge.isEternityChallengeCompleted(1) ? 'none' : ''~>, Next: ~f EternityChallenge.getEternityChallengeNextReward(1) ~x</span></span>
            </div>
          </td>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(2)~>
              <span>Eternity Challenge 2</span>
              <br/>
              <span>Boost costs are massively increased.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(2) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(2) ~ theorem~s EternityChallenge.getEternityChallengeCost(2) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(2) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(2) ~</span>
              <br/>
              <span><button onclick="EternityChallenge.pressEternityChallengeButton(2)">~r EternityChallenge.eternityChallengeButtonText(2) ~</button></span>
              <br/>
              <span>Reward: Boosts are cheaper.</span>
              <br/>
              <span>Current: Cost ^~f EternityChallenge.getEternityChallengeReward(2) ~<span ~style.display=EternityChallenge.isEternityChallengeCompleted(2) ? 'none' : ''~>, Next: Cost ^~f EternityChallenge.getEternityChallengeNextReward(2) ~</span></span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(3)~>
              <span>Eternity Challenge 3</span>
              <br/>
              <span>You can't prestige.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(3) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(3) ~ theorem~s EternityChallenge.getEternityChallengeCost(3) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(3) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(3) ~</span>
              <br/>
              <span><button onclick="EternityChallenge.pressEternityChallengeButton(3)">~r EternityChallenge.eternityChallengeButtonText(3) ~</button></span>
              <br/>
              <span>Reward: Exponent to prestige power.</span>
              <br/>
              <span>Current: ^~r formatWithPrecision(EternityChallenge.getEternityChallengeReward(3), 5) ~<span ~style.display=EternityChallenge.isEternityChallengeCompleted(3) ? 'none' : ''~>, Next: ^~r formatWithPrecision(EternityChallenge.getEternityChallengeNextReward(3), 5) ~</span></span>
            </div>
          </td>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(4)~>
              <span>Eternity Challenge 4</span>
              <br/>
              <span>You can infinity at most ~i EternityChallenge.eternityChallenge4AllowedInfinities() ~ time~s EternityChallenge.eternityChallenge4AllowedInfinities() ~. If you infinity more, you will automatically exit the challenge.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(4) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(4) ~ theorem~s EternityChallenge.getEternityChallengeCost(4) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(4) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(4) ~</span>
              <br/>
              <span><button onclick="EternityChallenge.pressEternityChallengeButton(4)">~r EternityChallenge.eternityChallengeButtonText(4) ~</button></span>
              <br/>
              <span>Reward: Multiplier to infinity generators based on total infinity points produced this eternity.</span>
              <br/>
              <span>Current: ~f EternityChallenge.getEternityChallengeReward(4) ~x<span ~style.display=EternityChallenge.isEternityChallengeCompleted(4) ? 'none' : ''~>, Next: ~f EternityChallenge.getEternityChallengeNextReward(4) ~x</span></span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(5)~>
              <span>Eternity Challenge 5</span>
              <br/>
              <span>Infinity generator multipliers are square-rooted (^~f 0.5 ~).</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(5) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(5) ~ theorem~s EternityChallenge.getEternityChallengeCost(5) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(5) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(5) ~</span>
              <br/>
              <span><button onclick="EternityChallenge.pressEternityChallengeButton(5)">~r EternityChallenge.eternityChallengeButtonText(5) ~</button></span>
              <br/>
              <span>Reward: Exponent to infinity generator multipliers.</span>
              <br/>
              <span>Current: ^~f EternityChallenge.getEternityChallengeReward(5) ~<span ~style.display=EternityChallenge.isEternityChallengeCompleted(5) ? 'none' : ''~>, Next: ^~f EternityChallenge.getEternityChallengeNextReward(5) ~</span></span>
            </div>
          </td>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(6)~>
              <span>Eternity Challenge 6</span>
              <br/>
              <span>All eternity challenge rewards are disabled.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(6) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(6) ~ theorem~s EternityChallenge.getEternityChallengeCost(6) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(6) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(6) ~</span>
              <br/>
              <span><button onclick="EternityChallenge.pressEternityChallengeButton(6)">~r EternityChallenge.eternityChallengeButtonText(6) ~</button></span>
              <br/>
              <span>Reward: All other eternity challenge rewards are stronger.</span>
              <br/>
              <span>Current: ~f EternityChallenge.getEternityChallengeReward(6) ~x<span ~style.display=EternityChallenge.isEternityChallengeCompleted(6) ? 'none' : ''~>, Next: ~f EternityChallenge.getEternityChallengeNextReward(6) ~x</span></span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(7)~>
              <span>Eternity Challenge 7</span>
              <br/>
              <span>Infinity generator per-purchase multipliers are disabled.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(7) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(7) ~ theorem~s EternityChallenge.getEternityChallengeCost(7) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(7) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(7) ~</span>
              <br/>
              <span><button onclick="EternityChallenge.pressEternityChallengeButton(7)">~r EternityChallenge.eternityChallengeButtonText(7) ~</button></span>
              <br/>
              <span>Reward: Multiplier to infinity generators based on eternity points produced this complexity.</span>
              <br/>
              <span>Current: ~f EternityChallenge.getEternityChallengeReward(7) ~x<span ~style.display=EternityChallenge.isEternityChallengeCompleted(7) ? 'none' : ''~>, Next: ~f EternityChallenge.getEternityChallengeNextReward(7) ~x</span></span>
            </div>
          </td>
          <td>
            <div class="eternitychallengediv" ~style.background=EternityChallenge.color(8)~>
              <span>Eternity Challenge 8</span>
              <br/>
              <span>Eternity generators are disabled.</span>
              <br/>
              <div ~style.display=EternityChallenge.isRequirementDisplayOn() ? '' : 'none'~>
                <span>Requirement to unlock:</span>
                <br/>
                <span>~r EternityChallenge.eternityChallengeRequirementDescription(8) ~</span>
              </div>
              <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
                <span>Cost: ~i EternityChallenge.getEternityChallengeCost(8) ~ theorem~s EternityChallenge.getEternityChallengeCost(8) ~</span>
              </div>
              <span>Goal: ~f EternityChallenge.getEternityChallengeGoal(8) ~ IP</span>
              <br/>
              <span>~r EternityChallenge.eternityChallengeStatusDescription(8) ~</span>
              <br/>
              <span><button onclick="EternityChallenge.pressEternityChallengeButton(8)">~r EternityChallenge.eternityChallengeButtonText(8) ~</button></span>
              <br/>
              <span>Reward: Multiplier to eternity generators.</span>
              <br/>
              <span>Current: ~f EternityChallenge.getEternityChallengeReward(8) ~x<span ~style.display=EternityChallenge.isEternityChallengeCompleted(8) ? 'none' : ''~>, Next: ~f EternityChallenge.getEternityChallengeNextReward(8) ~x</span></span>
            </div>
          </td>
        </tr>
      </table>
      <div ~style.display=EternityChallenge.isEternityChallengeUnlockingMeaningless() ? 'none' : ''~>
        <span>
          You can only have a single eternity challenge unlocked at a given time.
        </span>
        <br/>
        <span>
          Eternity challenges lock again once completed.
        </span>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'chroma' ? '' : 'none'~>
      <div ~style.display=Chroma.isUnlocked() ? 'none' : ''~>
        <button style="height: 48px;" onclick="Chroma.unlockColor(1)" ~class=Chroma.canUnlockColor(1) ? '' : 'disabled'~>
          Unlock Chroma<br/>Cost: ~f Chroma.getUnlockColorCost(1) ~ eternity points
        </button>
      </div>
      <div ~style.display=Chroma.isUnlocked() ? '' : 'none'~>
        <span>You have spent ~t player.stats.timeSinceEternity ~ in this eternity, giving you ~f Chroma.displayAmount() ~ chroma (capped at ~f Chroma.cap() ~, based on eternity points).</span>
        <br/>
        <span>Chroma gain will slow down over time, gradually approaching its cap but taking a very long time to reach it.</span>
        <br/>
        <span ~style.display=Chroma.producingAll() ? 'none' : ''~>You ~r Chroma.currentProductionTextPrefix() ~<span ~class=Chroma.currentColorClass()~>~r Chroma.currentColorName() ~</span>~r Chroma.currentProductionTextSuffix() ~, and will produce <span ~class=Chroma.nextColorClass()~>~r Chroma.nextColorName() ~</span> after next eternity reset.</span>
        <br ~style.display=Chroma.producingAll() ? 'none' : ''~/>
        <span>
          <span ~style.display=Chroma.producingAll() ? 'none' : ''~>The value of whatever color you are producing is</span>
          <span ~style.display=Chroma.producingAll() ? '' : 'none'~>The values of all colors are</span>
          constantly increased to your current chroma.</span>
        </span>
        <br/>
        <span>All sources of chroma buildup speed act retroactively in the current eternity.</span>
        <table style="margin-left: auto; margin-right: auto; border-spacing: 8px 0px; border-collapse: separate;">
          <tr>
            <td>
              <div ~class=Chroma.chromaDivClass(1)~ ~style.display=Chroma.canSeeThatColorExists(1) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(1) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(1)" ~class=Chroma.canUnlockColor(1) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(1) ~<br/>Cost: ~f Chroma.getUnlockColorCost(1) ~ eternity points
                  </button>
                </div>
                <div class="greydiv" ~style.display=Chroma.isColorUnlocked(1) ? '' : 'none'~>
                  <span>~r Chroma.colorName(1, true) ~: ~f Chroma.colorAmount(1) ~</span>
                  <br/>
                  <span>Multiplier per boost ~f Chroma.effectOfColor(1) ~x</span>
                  <br/>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(1)">Produce ~r Chroma.colorName(1) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(1) ~</span>
                </div>
              </div>
            </td>
            <td>
              <div ~class=Chroma.chromaDivClass(2)~ ~style.display=Chroma.canSeeThatColorExists(2) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(2) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(2)" ~class=Chroma.canUnlockColor(2) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(2) ~<br/>Cost: ~f Chroma.getUnlockColorCost(2) ~ eternity points
                  </button>
                </div>
                <div class="purplediv" ~style.display=Chroma.isColorUnlocked(2) ? '' : 'none'~>
                  <span>~r Chroma.colorName(2, true) ~: ~f Chroma.colorAmount(2) ~</span>
                  <br/>
                  <span>Eternity gain ~f Chroma.effectOfColor(2) ~x</span>
                  <br/>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(2)">Produce ~r Chroma.colorName(2) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(2) ~</span>
                </div>
              </div>
            </td>
            <td>
              <div ~class=Chroma.chromaDivClass(3)~ ~style.display=Chroma.canSeeThatColorExists(3) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(3) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(3)" ~class=Chroma.canUnlockColor(3) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(3) ~<br/>Cost: ~f Chroma.getUnlockColorCost(3) ~ eternity points
                  </button>
                </div>
                <div class="orangediv" ~style.display=Chroma.isColorUnlocked(3) ? '' : 'none'~>
                  <span>~r Chroma.colorName(3, true) ~: ~f Chroma.colorAmount(3) ~</span>
                  <br/>
                  <span>Chroma buildup speed ~f Chroma.effectOfColor(3) ~x</span>
                  <br/>
                  <span>(based on total EP this complexity)</span>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(3)">Produce ~r Chroma.colorName(3) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(3) ~</span>
                </div>
              </div>
            </td>
          </tr>
          <tr>
            <td>
              <div ~class=Chroma.chromaDivClass(4)~ ~style.display=Chroma.canSeeThatColorExists(4) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(4) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(4)" ~class=Chroma.canUnlockColor(4) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(4) ~<br/>Cost: ~f Chroma.getUnlockColorCost(4) ~ eternity points
                  </button>
                </div>
                <div class="cyandiv" ~style.display=Chroma.isColorUnlocked(4) ? '' : 'none'~>
                  <span>~r Chroma.colorName(4, true) ~: ~f Chroma.colorAmount(4) ~</span>
                  <br/>
                  <span>Eternity Generator 8 ~f Chroma.effectOfColor(4) ~x</span>
                  <br/>
                  <span>(based on Eternity Generator 8 amount)</span>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(4)">Produce ~r Chroma.colorName(4) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(4) ~</span>
                </div>
              </div>
            </td>
            <td>
              <div ~class=Chroma.chromaDivClass(5)~ ~style.display=Chroma.canSeeThatColorExists(5) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(5) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(5)" ~class=Chroma.canUnlockColor(5) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(5) ~<br/>Cost: ~f Chroma.getUnlockColorCost(5) ~ eternity points
                  </button>
                </div>
                <div class="greendiv" ~style.display=Chroma.isColorUnlocked(5) ? '' : 'none'~>
                  <span>~r Chroma.colorName(5, true) ~: ~f Chroma.colorAmount(5) ~</span>
                  <br/>
                  <span>~i Chroma.extraTheoremsActualAndDisplay() ~ extra theorem~s Chroma.extraTheoremsActualAndDisplay() ~, next at ~f Chroma.nextExtraTheorem() ~</span>
                  <br/>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(5)">Produce ~r Chroma.colorName(5) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(5) ~</span>
                </div>
              </div>
            </td>
            <td>
              <div ~class=Chroma.chromaDivClass(6)~ ~style.display=Chroma.canSeeThatColorExists(6) ? '' : 'none'~>
                <div ~style.display=Chroma.isColorUnlocked(6) ? 'none' : ''~>
                  <button style="height: 48px;" onclick="Chroma.unlockColor(6)" ~class=Chroma.canUnlockColor(6) ? '' : 'disabled'~>
                    Unlock ~r Chroma.colorName(6) ~<br/>Cost: ~f Chroma.getUnlockColorCost(6) ~ eternity points
                  </button>
                </div>
                <div class="reddiv" ~style.display=Chroma.isColorUnlocked(6) ? '' : 'none'~>
                  <span>~r Chroma.colorName(6, true) ~: ~f Chroma.colorAmount(6) ~</span>
                  <br/>
                  <span>Multiplier softcap ^~f Chroma.effectOfColor(6) ~</span>
                  <br/>
                  <span>(based on eternities this complexity)</span>
                  <br/>
                  <button ~style.display=Chroma.producingAll() ? 'none' : ''~ onclick="Chroma.setNextColor(6)">Produce ~r Chroma.colorName(6) ~ next</button>
                  <br/>
                  <span>~r Chroma.colorProductionStatus(6) ~</span>
                </div>
              </div>
            </td>
          </tr>
        </table>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'complexity' ? '' : 'none'~>
      <span>You have ~i ComplexityPoints.amount() ~ complexity point~s ComplexityPoints.amount() ~ (ℂP).
        <button ~class=ComplexityMaxAll.anythingToBuy() ? "" : "disabled"~ onclick="ComplexityMaxAll.maxAll()">Max all</button>
      </span>
      <br/>
      <span>You have produced ~i ComplexityPoints.totalCPProducedThisFinality() ~ complexity point~s ComplexityPoints.totalCPProducedThisFinality() ~ this finality.</span>
      <br/>
      <span>You have ~i Complexities.amount() ~ complexit~y Complexities.amount() ~, multiplying all complexity generators (ℂGs) by ~q Complexities.complexityGeneratorMultiplier() ~,</span>
      <br/>
      <span>multiplying permanence and chroma buildup speed by ~q Complexities.permanenceAndChromaMultiplier() ~,</span>
      <br/>
      <span>and <span ~style.display=EternityChallenge.autoECFromComplexities() ? '' : 'none'~>auto-completing an EC tier every ~tq Complexities.autoECCompletionTime() ~</span><span ~style.display=EternityChallenge.autoECFromComplexities() ? 'none' : ''~>never auto-completing an EC tier</span><span ~style.display=EternityChallenge.autoECFromFinalities() ? '' : 'none'~> (actually one EC tier per ~tq EternityChallenge.autoECCompletionTime() ~ due to finalities)</span>.</span>
      <br/>
      <span ~style.display=Complexities.hasAutoECCompletionSpeedupFromFinalities() ? '' : 'none'~>After finality, EC tier auto-completion from complexities is ~i Complexities.autoECCompletionSpeedupFromFinalities() ~x faster.</span>
      <br/>
      <span>You have ~f ComplexityStars.amount() ~ complexity stars, making all complexity challenge rewards ~f ComplexityStars.complexityChallengeRewardMultiplier() ~x stronger.</span>
      <br/>
      <span>You are getting ~f ComplexityStars.perSecond() ~ complexity stars per second.</span>
      <div ~style.display=FinalityMilestones.isFinalityMilestoneActive(5) ? '' : 'none'~>
        <span>You have ~f ComplexityStars.amount() ~^~f ComplexityStars.extraComplexityStarPower() ~ = ~f ComplexityStars.extraAmount() ~ hypercomplexity stars,</span>
        <br/>
        <span>used for Complexity Challenge 6 reward strength and complexity star factor.</span>
      </div>
      <br ~style.display=FinalityMilestones.isFinalityMilestoneActive(5) ? 'none' : ''~/>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr ~style.display=ComplexityGenerator(1).isVisible() ? '' : 'none'~>
          <td>Complexity Generator 1</td>
          <td>~f ComplexityGenerator(1).amount() ~</td>
          <td>~f ComplexityGenerator(1).perSecond() ~/s</td>
          <td>~f ComplexityGenerator(1).multiplier() ~x</td>
          <td><button ~class=ComplexityGenerator(1).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(1).buy()">Cost: ~i ComplexityGenerator(1).cost() ~ ℂP</button></td>
          <td><button ~class=ComplexityGenerator(1).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(1).buyMax()">Max</button></td>
          <td><button ~style.display=ComplexityAutobuyer(1).hasComplexityAutobuyer() ? '' : 'none'~ onclick="ComplexityAutobuyer(1).toggle()">Auto: ~r ComplexityAutobuyer(1).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=ComplexityGenerator(2).isVisible() ? '' : 'none'~>
          <td>Complexity Generator 2</td>
          <td>~f ComplexityGenerator(2).amount() ~</td>
          <td>~f ComplexityGenerator(2).perSecond() ~/s</td>
          <td>~f ComplexityGenerator(2).multiplier() ~x</td>
          <td><button ~class=ComplexityGenerator(2).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(2).buy()">Cost: ~i ComplexityGenerator(2).cost() ~ ℂP</button></td>
          <td><button ~class=ComplexityGenerator(2).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(2).buyMax()">Max</button></td>
          <td><button ~style.display=ComplexityAutobuyer(2).hasComplexityAutobuyer() ? '' : 'none'~ onclick="ComplexityAutobuyer(2).toggle()">Auto: ~r ComplexityAutobuyer(2).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=ComplexityGenerator(3).isVisible() ? '' : 'none'~>
          <td>Complexity Generator 3</td>
          <td>~f ComplexityGenerator(3).amount() ~</td>
          <td>~f ComplexityGenerator(3).perSecond() ~/s</td>
          <td>~f ComplexityGenerator(3).multiplier() ~x</td>
          <td><button ~class=ComplexityGenerator(3).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(3).buy()">Cost: ~i ComplexityGenerator(3).cost() ~ ℂP</button></td>
          <td><button ~class=ComplexityGenerator(3).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(3).buyMax()">Max</button></td>
          <td><button ~style.display=ComplexityAutobuyer(3).hasComplexityAutobuyer() ? '' : 'none'~ onclick="ComplexityAutobuyer(3).toggle()">Auto: ~r ComplexityAutobuyer(3).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=ComplexityGenerator(4).isVisible() ? '' : 'none'~>
          <td>Complexity Generator 4</td>
          <td>~f ComplexityGenerator(4).amount() ~</td>
          <td>~f ComplexityGenerator(4).perSecond() ~/s</td>
          <td>~f ComplexityGenerator(4).multiplier() ~x</td>
          <td><button ~class=ComplexityGenerator(4).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(4).buy()">Cost: ~i ComplexityGenerator(4).cost() ~ ℂP</button></td>
          <td><button ~class=ComplexityGenerator(4).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(4).buyMax()">Max</button></td>
          <td><button ~style.display=ComplexityAutobuyer(4).hasComplexityAutobuyer() ? '' : 'none'~ onclick="ComplexityAutobuyer(4).toggle()">Auto: ~r ComplexityAutobuyer(4).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=ComplexityGenerator(5).isVisible() ? '' : 'none'~>
          <td>Complexity Generator 5</td>
          <td>~f ComplexityGenerator(5).amount() ~</td>
          <td>~f ComplexityGenerator(5).perSecond() ~/s</td>
          <td>~f ComplexityGenerator(5).multiplier() ~x</td>
          <td><button ~class=ComplexityGenerator(5).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(5).buy()">Cost: ~i ComplexityGenerator(5).cost() ~ ℂP</button></td>
          <td><button ~class=ComplexityGenerator(5).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(5).buyMax()">Max</button></td>
          <td><button ~style.display=ComplexityAutobuyer(5).hasComplexityAutobuyer() ? '' : 'none'~ onclick="ComplexityAutobuyer(5).toggle()">Auto: ~r ComplexityAutobuyer(5).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=ComplexityGenerator(6).isVisible() ? '' : 'none'~>
          <td>Complexity Generator 6</td>
          <td>~f ComplexityGenerator(6).amount() ~</td>
          <td>~f ComplexityGenerator(6).perSecond() ~/s</td>
          <td>~f ComplexityGenerator(6).multiplier() ~x</td>
          <td><button ~class=ComplexityGenerator(6).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(6).buy()">Cost: ~i ComplexityGenerator(6).cost() ~ ℂP</button></td>
          <td><button ~class=ComplexityGenerator(6).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(6).buyMax()">Max</button></td>
          <td><button ~style.display=ComplexityAutobuyer(6).hasComplexityAutobuyer() ? '' : 'none'~ onclick="ComplexityAutobuyer(6).toggle()">Auto: ~r ComplexityAutobuyer(6).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=ComplexityGenerator(7).isVisible() ? '' : 'none'~>
          <td>Complexity Generator 7</td>
          <td>~f ComplexityGenerator(7).amount() ~</td>
          <td>~f ComplexityGenerator(7).perSecond() ~/s</td>
          <td>~f ComplexityGenerator(7).multiplier() ~x</td>
          <td><button ~class=ComplexityGenerator(7).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(7).buy()">Cost: ~i ComplexityGenerator(7).cost() ~ ℂP</button></td>
          <td><button ~class=ComplexityGenerator(7).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(7).buyMax()">Max</button></td>
          <td><button ~style.display=ComplexityAutobuyer(7).hasComplexityAutobuyer() ? '' : 'none'~ onclick="ComplexityAutobuyer(7).toggle()">Auto: ~r ComplexityAutobuyer(7).isOn() ? "On" : "Off" ~</button></td>
        </tr>
        <tr ~style.display=ComplexityGenerator(8).isVisible() ? '' : 'none'~>
          <td>Complexity Generator 8</td>
          <td>~f ComplexityGenerator(8).amount() ~</td>
          <td>~f ComplexityGenerator(8).perSecond() ~/s</td>
          <td>~f ComplexityGenerator(8).multiplier() ~x</td>
          <td><button ~class=ComplexityGenerator(8).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(8).buy()">Cost: ~i ComplexityGenerator(8).cost() ~ ℂP</button></td>
          <td><button ~class=ComplexityGenerator(8).canBuy() ? "" : "disabled"~ onclick="ComplexityGenerator(8).buyMax()">Max</button></td>
          <td><button ~style.display=ComplexityAutobuyer(8).hasComplexityAutobuyer() ? '' : 'none'~ onclick="ComplexityAutobuyer(8).toggle()">Auto: ~r ComplexityAutobuyer(8).isOn() ? "On" : "Off" ~</button></td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'complexity-challenges' ? '' : 'none'~>
      <span>
        You have completed ~i ComplexityChallenge.getTotalComplexityChallengeCompletions() ~ complexity challenge tier~s ComplexityChallenge.getTotalComplexityChallengeCompletions() ~.
        <button onclick="ComplexityChallenge.complexityReset(true)">Restart complexity and re-enter all complexity challenges</button>
      </span>
      <br/>
      <span>You have ~i Complexities.amount() ~ complexit~y Complexities.amount() ~ (allowing you to enter ~i ComplexityChallenge.numberUnlocked() ~ complexity challenge~s ComplexityChallenge.numberUnlocked() ~).</span>
      <br/>
      <span>Complexity challenge rewards are currently ~f ComplexityStars.complexityChallengeRewardMultiplier() ~x stronger (from ~f ComplexityStars.amount() ~ complexity stars).</span>
      <br ~style.display=FinalityMilestones.isFinalityMilestoneActive(5) ? '' : 'none'~/>
      <span ~style.display=FinalityMilestones.isFinalityMilestoneActive(5) ? '' : 'none'~>The Complexity Challenge 6 reward is instead currently ~f ComplexityStars.complexityChallengeRewardMultiplier(6) ~x stronger (from ~f ComplexityStars.extraAmount() ~ hypercomplexity stars).</span>
      <br/>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="complexitychallengediv yellowdiv" ~style.background=ComplexityChallenge.color(1)~>
              <span>Complexity Challenge 1</span>
              <br/>
              <span>No requirement (you're always in this challenge).</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(1) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(1) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(1) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(1) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(1) ? '' : 'none'~/>
              <span>Reward: Multiplier to normal generators based on stars.</span>
              <br/>
              <span>Current: ~f ComplexityChallenge.getComplexityChallengeReward(1) ~x, Next: ~f ComplexityChallenge.getComplexityChallengeNextReward(1) ~x</span>
            </div>
          </td>
          <td>
            <div class="complexitychallengediv greydiv" ~style.background=ComplexityChallenge.color(2)~>
              <span>Complexity Challenge 2</span>
              <br/>
              <span>You can't buy boosts.</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(2) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(2) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(2) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(2) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(2) ? '' : 'none'~/>
              <span><button onclick="ComplexityChallenge.toggleSafeguard(2)">Buying boosts: ~r ComplexityChallenge.isSafeguardOn(2) ? "Disabled" : "Enabled" ~</button></span>
              <br/>
              <span ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(2) ? 'none' : ''~>(Disabling this doesn't put you in this challenge yet, since the challenge is locked.)</span>
              <br ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(2) ? 'none' : ''~/>
              <span>Reward: Boosts are cheaper.</span>
              <br/>
              <span>Current: Cost ^~r formatWithPrecision(ComplexityChallenge.getComplexityChallengeReward(2), 5) ~, Next: Cost ^~r formatWithPrecision(ComplexityChallenge.getComplexityChallengeNextReward(2), 5) ~</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="complexitychallengediv purplediv" ~style.background=ComplexityChallenge.color(3)~>
              <span>Complexity Challenge 3</span>
              <br/>
              <span>You can't unlock the Eternity Producer.</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(3) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(3) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(3) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(3) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(3) ? '' : 'none'~/>
              <span><button onclick="ComplexityChallenge.toggleSafeguard(3)">Unlocking the Eternity Producer: ~r ComplexityChallenge.isSafeguardOn(3) ? "Disabled" : "Enabled" ~</button></span>
              <br/>
              <span ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(3) ? 'none' : ''~>(Disabling this doesn't put you in this challenge yet, since the challenge is locked.)</span>
              <br ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(3) ? 'none' : ''~/>
              <span>Reward: Multiplier to eternity gain.</span>
              <br/>
              <span>Current: ~f ComplexityChallenge.getComplexityChallengeReward(3) ~x, Next: ~f ComplexityChallenge.getComplexityChallengeNextReward(3) ~x</span>
            </div>
          </td>
          <td>
            <div class="complexitychallengediv orangediv" ~style.background=ComplexityChallenge.color(4)~>
              <span>Complexity Challenge 4</span>
              <br/>
              <span>You can't unlock chroma.</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(4) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(4) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(4) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(4) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(4) ? '' : 'none'~/>
              <span><button onclick="ComplexityChallenge.toggleSafeguard(4)">Unlocking chroma and colors: ~r ComplexityChallenge.isSafeguardOn(4) ? "Disabled" : "Enabled" ~</button></span>
              <br/>
              <span ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(4) ? 'none' : ''~>(Disabling this doesn't put you in this challenge yet, since the challenge is locked.)</span>
              <br ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(4) ? 'none' : ''~/>
              <span>Reward: Multiplier to chroma cap.</span>
              <br/>
              <span>Current: ~f ComplexityChallenge.getComplexityChallengeReward(4) ~x, Next: ~f ComplexityChallenge.getComplexityChallengeNextReward(4) ~x</span>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="complexitychallengediv cyandiv" ~style.background=ComplexityChallenge.color(5)~>
              <span>Complexity Challenge 5</span>
              <br/>
              <span>You can't buy Eternity Generator 8.</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(5) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(5) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(5) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(5) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(5) ? '' : 'none'~/>
              <span><button onclick="ComplexityChallenge.toggleSafeguard(5)">Buying Eternity Generator 8: ~r ComplexityChallenge.isSafeguardOn(5) ? "Disabled" : "Enabled" ~</button></span>
              <br/>
              <span ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(5) ? 'none' : ''~>(Disabling this doesn't put you in this challenge yet, since the challenge is locked.)</span>
              <br ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(5) ? 'none' : ''~/>
              <span>Reward: Multiplier to per-purchase Eternity Generator 8 multiplier.</span>
              <br/>
              <span>Current: ~f ComplexityChallenge.getComplexityChallengeReward(5) ~x, Next: ~f ComplexityChallenge.getComplexityChallengeNextReward(5) ~x</span>
            </div>
          </td>
          <td>
            <div class="complexitychallengediv greendiv" ~style.background=ComplexityChallenge.color(6)~>
              <span>Complexity Challenge 6</span>
              <br/>
              <span>You can't buy or have studies.</span>
              <br/>
              <span>Goal: ~f ComplexityChallenge.getComplexityChallengeGoal(6) ~ stars</span>
              <br/>
              <span>~r ComplexityChallenge.complexityChallengeStatusDescription(6) ~</span>
              <br/>
              <span ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(6) ? '' : 'none'~>~r ComplexityChallenge.complexityChallengeLastCompletionDescription(6) ~</span>
              <br ~style.display=ComplexityChallenge.showComplexityChallengeLastCompletionDescription(6) ? '' : 'none'~/>
              <span><button onclick="ComplexityChallenge.toggleSafeguard(6)">Buying studies: ~r ComplexityChallenge.isSafeguardOn(6) ? "Disabled" : "Enabled" ~</button></span>
              <br/>
              <span ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(6) ? 'none' : ''~>(Disabling this doesn't put you in this challenge yet, since the challenge is locked.)</span>
              <br ~style.display=ComplexityChallenge.isComplexityChallengeUnlocked(6) ? 'none' : ''~/>
              <span style="font-size: 0.875rem" ~style.display=(ComplexityAchievements.hasComplexityAchievement(4, 4) && ComplexityChallenge.isComplexityChallengeUnlocked(6)) ? '' : 'none'~>(Due to "On the other side", you also need to respec studies to enter this challenge. Disabling buying studies will respec studies on complexity.)</span>
              <br ~style.display=(ComplexityAchievements.hasComplexityAchievement(4, 4) && ComplexityChallenge.isComplexityChallengeUnlocked(6)) ? '' : 'none'~/>
              <span>Reward: Extra theorems.</span>
              <br/>
              <span>Current: +~i ComplexityChallenge.getComplexityChallengeReward(6) ~ theorem~s ComplexityChallenge.getComplexityChallengeReward(6) ~, Next: +~i ComplexityChallenge.getComplexityChallengeNextReward(6) ~</span>
              <br ~style.display=ComplexityChallenge.showActualExtraTheorems() ? '' : 'none'~/>
              <span ~style.display=ComplexityChallenge.showActualExtraTheorems() ? '' : 'none'~>(increased to +~i ComplexityChallenge.extraTheoremsActualAndDisplay() ~, from "On the other side")</span>
              <br ~style.display=ComplexityChallenge.extraComplexityStarsForNextExtraTheorem().neq(Infinity) ? '' : 'none'~/>
              <span ~style.display=ComplexityChallenge.extraComplexityStarsForNextExtraTheorem().neq(Infinity) ? '' : 'none'~>Next theorem at ~f ComplexityChallenge.extraComplexityStarsForNextExtraTheorem() ~ <span ~style.display=FinalityMilestones.isFinalityMilestoneActive(5) ? '' : 'none'~>hyper</span>complexity stars.</span>
            </div>
          </td>
        </tr>
      </table>
      <span>
        Being in a complexity challenge doesn't prevent you from violating its condition.
      <span>
      <br/>
      <span>
        Instead, violating the condition makes you exit the challenge.
      </span>
      <br/>
      <span>
        Thus, you are automatically in whichever complexity challenges you have not yet violated the condition of this complexity.
      </span>
      <br/>
      <span>
        In particular, when starting a new complexity, you will be in all complexity challenges that you've unlocked at once.
      </span>
      <br ~style.display=Trivia.show('CC1 pre-complexity completion') ? 'none' : ''~/>
      <div ~style.display=Trivia.show('CC1 pre-complexity completion') ? '' : 'none'~/>
        <span>
          You can complete Complexity Challenge 1 even pre-complexity.
        </span>
        <br/>
        <span>
          This allows you to start with a Complexity Challenge 1 completion.
        </span>
      </div>
      <span>
        The header does not mention that you are in Complexity Challenge 1 to avoid clutter, since you are always in it.
      </span>
      <br/>
      <span>
        The ability to disable certain things is there to prevent accidental violation of complexity challenge requirements.
      </span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'complexity-achievements' ? '' : 'none'~>
      <span>
        You have unlocked ~i ComplexityAchievements.getTotalAchievementsUnlocked() ~ complexity achievement~s ComplexityAchievements.getTotalAchievementsUnlocked() ~.
      </span>
      <br/>
      <span>
        At ~i ComplexityAchievements.getAchievementsUnlockedRewardThreshold(1) ~ complexity achievements unlocked:
      </span>
      <br/>
      <span>
         You start each ~r PrestigeLayerNames.layersAbove('complexity') ~ with EP equal to your highest-ever number of boosts (~i ComplexityAchievements.getAchievementsUnlockedRewardRawEffect(1) ~)
      </span>
      <br/>
      <span>
        At ~i ComplexityAchievements.getAchievementsUnlockedRewardThreshold(2) ~ complexity achievements unlocked:
      </span>
      <br/>
      <span>
        Multiplier to eternity gain based on complexity achievements unlocked (~q ComplexityAchievements.getAchievementsUnlockedRewardRawEffect(2) ~)
      </span>
      <br/>
      <span>
        At ~i ComplexityAchievements.getAchievementsUnlockedRewardThreshold(3) ~ complexity achievements unlocked:
      </span>
      <br/>
      <span>
        Unlock a new color of chroma.
      </span>
      <br/>
      <span>
        At ~i ComplexityAchievements.getAchievementsUnlockedRewardThreshold(4) ~ complexity achievements unlocked:
      </span>
      <br/>
      <span>
        You start each ~r PrestigeLayerNames.layersAbove('complexity') ~ with ~f ComplexityAchievements.getAchievementsUnlockedRewardRawEffect(4) ~ EP, and you get a complexity autobuyer.
      </span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(1, 1)~>
              <span class="greytogrey">One per generator</span>
              <br/>
              Complete Complexity Challenge 2 ~i 8 ~ times.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(1, 1) ~
              <br/>
              The multiplier to permanence and chroma from complexities also applies to boost power (currently ~q ComplexityAchievements.rawEffect(1, 1) ~x)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(1, 2)~>
              <span class="greytopurple">Forever isn't too long</span>
              <br/>
              Eternity in Complexity Challenge 2.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(1, 2) ~
              <br/>
              You start each ~r PrestigeLayerNames.layersAbove('complexity') ~ with eternities based on your complexities (currently ~i ComplexityAchievements.rawEffect(1, 2) ~)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(1, 3)~>
              <span class="greytoorange">More colorful than a potato</span>
              <br/>
              Unlock chroma in Complexity Challenge 2.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(1, 3) ~
              <br/>
              Automatically unlock the Eternity Producer, chroma, and colors of chroma when possible.
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(1, 4)~>
              <span class="greytogreen">Forgot something</span>
              <br/>
              Get ~i 11 ~ studies in Complexity Challenge 2.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(1, 4) ~
              <br/>
              Power to fourth-row study effects based on boost multiplier (currently ^~f ComplexityAchievements.rawEffect(1, 4) ~)
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(2, 1)~>
              <span class="purpletogrey">Actually a boost</span>
              <br/>
              Get a per-boost multiplier of ~f Math.pow(2, 24) ~ outside of Infinity Challenge 7 in Complexity Challenge 3.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(2, 1) ~
              <br/>
              Multiplier to the per-boost multiplier based on eternities (currently ~f ComplexityAchievements.rawEffect(2, 1) ~x)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(2, 2)~>
              <span class="purpletopurple">Time after time</span>
              <br/>
              Get ~f Math.pow(2, 24) ~ eternities in Complexity Challenge 3.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(2, 2) ~
              <br/>
              You always have autobuyers for eternity upgrades, eternity generators, and Eternity Producer upgrades, and you get autobuyers for theorems, permanence, and permanence upgrades.
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(2, 3)~>
              <span class="purpletoorange">After a hurricane</span>
              <br/>
              Unlock chroma in Complexity Challenge 3.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(2, 3) ~
              <br/>
              Multiplier to chroma buildup speed based on eternities (currently ~f ComplexityAchievements.rawEffect(2, 3) ~x)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(2, 4)~>
              <span class="purpletogreen">3 * 7 * 11</span>
              <br/>
              Get ~i 231 ~ theorems in Complexity Challenge 3.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(2, 4) ~
              <br/>
              Study 7 and Study 11 effects are uncapped and raised ^~i ComplexityAchievements.rawEffect(2, 4) ~.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(3, 1)~>
              <span class="orangetogrey">No rest</span>
              <br/>
              Get ~f 1024 ~ boosts in Eternity Challenge 2 in Complexity Challenge 4.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(3, 1) ~
              <br/>
              Grey chroma powers purple and orange chroma effects (currently ^~f ComplexityAchievements.rawEffect(3, 1) ~)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(3, 2)~>
              <span class="orangetopurple">Broke every stone</span>
              <br/>
              Complete all eternity challenges, without using automatic eternity challenge completion, in Complexity Challenge 4.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(3, 2) ~
              <br/>
              Eternity challenge requirements and costs are removed, and you can complete multiple eternity challenge tiers at once.
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(3, 3)~>
              <span class="orangetoorange">Shadeless</span>
              <br/>
              Complete Complexity Challenge 4 ~i 13 ~ times.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(3, 3) ~
              <br/>
              Chroma always produces all unlocked colors at once.
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(3, 4)~>
              <span class="orangetogreen">Thousand-theorem twilight</span>
              <br/>
              Get ~f Decimal.pow(2, 1.75 * Math.pow(2, 16)) ~ eternity points, without buying theorems, in Complexity Challenge 4.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(3, 4) ~
              <br/>
              Extra theorems from green ^~f ComplexityAchievements.rawEffect(3, 4) ~.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(4, 1)~>
              <span class="greentogrey">Power beats knowledge</span>
              <br/>
              Get ~f Math.pow(2, 16) ~ boost power in Complexity Challenge 6.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(4, 1) ~
              <br/>
              Increase the per-purchase complexity generator multiplier based on best boost power (currently ~f ComplexityAchievements.rawEffect(4, 1) ~x)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(4, 2)~>
              <span class="greentopurple">Calm EC</span>
              <br/>
              Complete ~i 20 ~ eternity challenge tiers, without using automatic eternity challenge completion, in Complexity Challenge 6.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(4, 2) ~
              <br/>
              You start each ~r PrestigeLayerNames.layersAbove('complexity') ~ with all eternity challenges completed.
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(4, 3)~>
              <span class="greentoorange">Nonzero-color theorem</span>
              <br/>
              Unlock chroma in Complexity Challenge 6.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(4, 3) ~
              <br/>
              Multiplier to chroma cap based on theorems (currently ~f ComplexityAchievements.rawEffect(4, 3) ~x)
            </div>
          </td>
          <td>
            <div class="complexityachievementdiv" ~style.background=ComplexityAchievements.color(4, 4)~>
              <span class="greentogreen">On the other side</span>
              <br/>
              Get ~i 168 ~ theorems in Complexity Challenge 6.
              <br/>
              ~r ComplexityAchievements.complexityAchievementStatusDescription(4, 4) ~
              <br/>
              You keep your theorems, studies, and best boost power on complexity.
            </div>
          </td>
        </tr>
      </table>
      <span ~style.display=SpecialTabs.isTabVisible('powers') ? 'none' : ''~>Completing all complexity achievements for the first time will also let you view the Powers tab.</span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'powers' ? '' : 'none'~>
      <div ~style.display=Powers.isUnlocked() ? 'none' : ''~>
        <button style="height: 48px;" onclick="Powers.unlock()" ~class=Powers.canUnlock() ? '' : 'disabled'~>
          Unlock Powers<br/>Cost: ~f Powers.unlockCost() ~ complexity points
        </button>
        <div ~style.display=SpecialTabs.isTabVisible('oracle') ? 'none' : ''~>Unlocking powers for the first time will also let you view the Oracle tab.</div>
        <div ~style.display=FinalityMilestones.isFinalityMilestoneActive(6) ? 'none' : ''~>Unlocking powers will also let you gain your eternity points on eternity every second, without needing to eternity (EP generation).</div>
      </div>
      <div ~style.display=Powers.isUnlocked() ? '' : 'none'~>
        <span>You have ~i Powers.active().length ~/~i Powers.activatedLimit() ~ active power~s Powers.activatedLimit() ~.</span>
        <br/>
        <span>Active powers raise various generator multipliers to powers. Stored powers do not, but can be activated.</span>
        <br/>
        <span>You can have multiple powers of the same type active; the only rule about active powers is that you can have at most ~i Powers.activatedLimit() ~ at once.</span>
        <br ~style.display=FinalityMilestones.isFinalityMilestoneActive(6) ? 'none' : ''~/>
        <span ~style.display=FinalityMilestones.isFinalityMilestoneActive(6) ? 'none' : ''~>Due to unlocking powers, you gain your eternity points on eternity every second, without needing to eternity (EP generation).</span>
        <br/>
        <br/>
        <span>You gain a new power once every ~t Powers.interval() ~, next in ~t Powers.timeUntilPowerGain() ~. <button onclick="Powers.togglePowerGain()">Power gain: ~r Powers.isPowerGainOn() ? "On" : "Off" ~</button></span>
        <br ~style.display=!Powers.isPowerGainOn() && Powers.imminentPowerGain() !== 0 ? '' : 'none'~/>
        <span ~style.display=!Powers.isPowerGainOn() && Powers.imminentPowerGain() !== 0 ? '' : 'none'~>Turning power gain on would give you ~i Powers.imminentPowerGain() ~ new power~s Powers.imminentPowerGain() ~.</span>
        <br/>
        <span>New powers generally have a random type and random rarity.</span>
        <br/>
        <span>However, no two consecutive new powers can have the same type or both have a rarity in the bottom ~f RNG.lowRarityThreshold() ~ of rarities.</span>
        <br/>
        <div ~style.display=Powers.showNextPower() ? '' : 'none'~>
          <br/>
          <span>Next power<span ~style.display=Powers.nextKept() ? 'none' : ''~> (will be automatically deleted due to being bad enough to be useless)</span>:</span>
          <br/>
          <span ~class=Powers.color('next', 1)~>~r Powers.descriptionFull('next', 1) ~</span>
        </div>
        <br/>
        <span>The powers activated by importing powers will be the strongest stored powers of the chosen types.</span>
        <br/>
        <button class="powers-export-button" onclick="Powers.export()">Export active powers</button> <button onclick="Powers.import()">Import active powers</button>
        <button onclick="Powers.toggleRespec()">Deactivate active powers on next complexity: ~r Powers.isRespecOn() ? "On" : "Off" ~</button>
        <br/>
        <button onclick="Powers.respecAndReset()">Deactivate active powers and ~r ComplexityPrestigeLayer.resetText() ~</button></button>
        <br/>
        <br/>
        <div style="width: 1024px; margin-left: auto; margin-right: auto;">
          <span>Click on the name of a power preset on the line below to activate those powers:</span>
          <br/>
          <button ~style.display=Powers.hasPreset(1) ? '' : 'none'~ onclick="Powers.presetLoad(1)">~r Powers.presetName(1) ~</button>
          <button ~style.display=Powers.hasPreset(2) ? '' : 'none'~ onclick="Powers.presetLoad(2)">~r Powers.presetName(2) ~</button>
          <button ~style.display=Powers.hasPreset(3) ? '' : 'none'~ onclick="Powers.presetLoad(3)">~r Powers.presetName(3) ~</button>
          <button ~style.display=Powers.hasPreset(4) ? '' : 'none'~ onclick="Powers.presetLoad(4)">~r Powers.presetName(4) ~</button>
          <button ~style.display=Powers.hasPreset(5) ? '' : 'none'~ onclick="Powers.presetLoad(5)">~r Powers.presetName(5) ~</button>
          <button ~style.display=Powers.hasPreset(6) ? '' : 'none'~ onclick="Powers.presetLoad(6)">~r Powers.presetName(6) ~</button>
          <button ~style.display=Powers.hasPreset(7) ? '' : 'none'~ onclick="Powers.presetLoad(7)">~r Powers.presetName(7) ~</button>
          <button ~style.display=Powers.hasPreset(8) ? '' : 'none'~ onclick="Powers.presetLoad(8)">~r Powers.presetName(8) ~</button>
          <button ~style.display=Powers.hasPreset(9) ? '' : 'none'~ onclick="Powers.presetLoad(9)">~r Powers.presetName(9) ~</button>
          <button ~style.display=Powers.hasPreset(10) ? '' : 'none'~ onclick="Powers.presetLoad(10)">~r Powers.presetName(10) ~</button>
          <button ~style.display=Powers.hasPreset(11) ? '' : 'none'~ onclick="Powers.presetLoad(11)">~r Powers.presetName(11) ~</button>
          <button ~style.display=Powers.hasPreset(12) ? '' : 'none'~ onclick="Powers.presetLoad(12)">~r Powers.presetName(12) ~</button>
          <button ~style.display=Powers.hasPreset(13) ? '' : 'none'~ onclick="Powers.presetLoad(13)">~r Powers.presetName(13) ~</button>
          <button ~style.display=Powers.hasPreset(14) ? '' : 'none'~ onclick="Powers.presetLoad(14)">~r Powers.presetName(14) ~</button>
          <button ~style.display=Powers.hasPreset(15) ? '' : 'none'~ onclick="Powers.presetLoad(15)">~r Powers.presetName(15) ~</button>
          <button ~style.display=Powers.hasPreset(16) ? '' : 'none'~ onclick="Powers.presetLoad(16)">~r Powers.presetName(16) ~</button>
          <button ~style.display=Powers.hasPreset(17) ? '' : 'none'~ onclick="Powers.presetLoad(17)">~r Powers.presetName(17) ~</button>
          <button ~style.display=Powers.hasPreset(18) ? '' : 'none'~ onclick="Powers.presetLoad(18)">~r Powers.presetName(18) ~</button>
          <button ~style.display=Powers.hasPreset(19) ? '' : 'none'~ onclick="Powers.presetLoad(19)">~r Powers.presetName(19) ~</button>
          <button ~style.display=Powers.hasPreset(20) ? '' : 'none'~ onclick="Powers.presetLoad(20)">~r Powers.presetName(20) ~</button>
          <button ~style.display=Powers.hasPreset(21) ? '' : 'none'~ onclick="Powers.presetLoad(21)">~r Powers.presetName(21) ~</button>
          <button ~style.display=Powers.hasPreset(22) ? '' : 'none'~ onclick="Powers.presetLoad(22)">~r Powers.presetName(22) ~</button>
          <button ~style.display=Powers.hasPreset(23) ? '' : 'none'~ onclick="Powers.presetLoad(23)">~r Powers.presetName(23) ~</button>
          <button ~style.display=Powers.hasPreset(24) ? '' : 'none'~ onclick="Powers.presetLoad(24)">~r Powers.presetName(24) ~</button>
          <button ~style.display=Powers.hasPreset(25) ? '' : 'none'~ onclick="Powers.presetLoad(25)">~r Powers.presetName(25) ~</button>
          <button ~style.display=Powers.hasPreset(26) ? '' : 'none'~ onclick="Powers.presetLoad(26)">~r Powers.presetName(26) ~</button>
          <button ~style.display=Powers.hasPreset(27) ? '' : 'none'~ onclick="Powers.presetLoad(27)">~r Powers.presetName(27) ~</button>
          <button ~style.display=Powers.hasPreset(28) ? '' : 'none'~ onclick="Powers.presetLoad(28)">~r Powers.presetName(28) ~</button>
          <button ~style.display=Powers.hasPreset(29) ? '' : 'none'~ onclick="Powers.presetLoad(29)">~r Powers.presetName(29) ~</button>
          <button ~style.display=Powers.hasPreset(30) ? '' : 'none'~ onclick="Powers.presetLoad(30)">~r Powers.presetName(30) ~</button>
          <button ~style.display=Powers.hasPreset(31) ? '' : 'none'~ onclick="Powers.presetLoad(31)">~r Powers.presetName(31) ~</button>
          <button ~style.display=Powers.hasPreset(32) ? '' : 'none'~ onclick="Powers.presetLoad(32)">~r Powers.presetName(32) ~</button>
          <div ~style.display=Powers.hasPreset(1) ? 'none' : ''~>
            You don't currently have any power presets. You can create presets at the bottom of this tab.
          </div>
        </div>
        <div ~style.display=Powers.isAutoLoadUnlocked() ? '' : 'none'~>
          Active powers to constantly load: <input style="width: 256px;" type="text" ~!value=Powers.powerListToAutoLoad()~ ~!onchange=function() {Powers.setPowerListToAutoLoad(this.value)}~></input> <button onclick="Powers.toggleAutoLoad()">Auto-load: ~r Powers.isAutoLoadOn() ? "On" : "Off" ~</button>
        </div>
        <br/>
        <span>Active powers:</span>
        <table style="margin-left: auto; margin-right: auto; border-collapse: collapse;">
          <tr>
            <td class="mediumpowertd">
              <div ~style.display=Powers.canAccessPower('active', 1) ? '' : 'none'~>
                <span ~class=Powers.color('active', 1)~>~r Powers.descriptionFullEffect('active', 1) ~</span>
                <br/>
                <span ~class=Powers.color('active', 1)~>~r Powers.descriptionStrengthRarity('active', 1) ~</span>
                <br/>
                <span ~class=Powers.color('active', 1)~>~r Powers.descriptionMultiplier('active', 1) ~</span>
                <br/>
                <button onclick="Powers.deactivate(1)" ~class=Powers.canDeactivate(1) ? '' : 'disabled'~>Deactivate</button>
              </div>
            </td>
            <td class="mediumpowertd">
              <div ~style.display=Powers.canAccessPower('active', 2) ? '' : 'none'~>
                <span ~class=Powers.color('active', 2)~>~r Powers.descriptionFullEffect('active', 2) ~</span>
                <br/>
                <span ~class=Powers.color('active', 2)~>~r Powers.descriptionStrengthRarity('active', 2) ~</span>
                <br/>
                <span ~class=Powers.color('active', 2)~>~r Powers.descriptionMultiplier('active', 2) ~</span>
                <br/>
                <button onclick="Powers.deactivate(2)" ~class=Powers.canDeactivate(2) ? '' : 'disabled'~>Deactivate</button>
              </div>
            </td>
            <td class="mediumpowertd">
              <div ~style.display=Powers.canAccessPower('active', 3) ? '' : 'none'~>
                <span ~class=Powers.color('active', 3)~>~r Powers.descriptionFullEffect('active', 3) ~</span>
                <br/>
                <span ~class=Powers.color('active', 3)~>~r Powers.descriptionStrengthRarity('active', 3) ~</span>
                <br/>
                <span ~class=Powers.color('active', 3)~>~r Powers.descriptionMultiplier('active', 3) ~</span>
                <br/>
                <button onclick="Powers.deactivate(3)" ~class=Powers.canDeactivate(3) ? '' : 'disabled'~>Deactivate</button>
              </div>
            </td>
          </tr>
        </table>
        <span>Current effects of active powers:</span>
        <br/>
        <span style="margin-left: 19px;" class="yellowspan">~r Powers.totalEffectDescription('normal') ~</span>
        <br/>
        <span class="magentaspan">~r Powers.totalEffectDescription('infinity') ~</span>
        <br/>
        <span class="cyanspan">~r Powers.totalEffectDescription('eternity') ~</span>
        <br/>
        <span style="margin-left: -19px;" class="brownspan">~r Powers.totalEffectDescription('complexity') ~</span>
        <br/>
        <br/>
        <span>Stored powers:</span>
        <table style="margin-left: auto; margin-right: auto; border-collapse: collapse;">
          <tr>
            <td class="largepowertd">
              <span class="yellowspan">Normal</span>
              <br/>
              <span class="yellowspan">No extra multiplier</span>
              <br/>
              <br/>
              <br/>
            </td>
            <td class="largepowertd">
              <span class="magentaspan">Infinity</span>
              <br/>
              <span class="magentaspan">Extra multiplier from infinity stars</span>
              <br/>
              <br/>
              <span class="magentaspan">~f Powers.getExtraMultiplier('infinity') ~x</span>
            </td>
            <td class="largepowertd">
              <span class="cyanspan">Eternity</span>
              <br/>
              <span class="cyanspan">Extra multiplier from complexity stars and time in complexity</span>
              <br/>
              <span class="cyanspan">~f Powers.getExtraMultiplier('eternity') ~x<span ~style.display=Powers.isTypeAtCap('eternity') ? '' : 'none'~> (capped)</span></span>
            </td>
            <td class="largepowertd">
              <span class="brownspan">Complexity</span>
              <br/>
              <span class="brownspan">Extra multiplier from total strength and rarity of active powers</span>
              <br/>
              <span class="brownspan">~f Powers.getExtraMultiplier('complexity') ~x</span>
            </td>
          </tr>
          <tr>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 1) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 1)~>~r Powers.descriptionEffect('stored', 1) ~ <button onclick="Powers.activate(1)" ~class=Powers.canActivate(1) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 1)~>~r Powers.descriptionStrengthRarity('stored', 1) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 1)~>~r Powers.descriptionMultiplier('stored', 1) ~</span>
                <br/>
                <button onclick="Powers.delete(1)" ~class=Powers.canDelete(1) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(1) ~ power shards)</button>
              </div>
            </td>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 2) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 2)~>~r Powers.descriptionEffect('stored', 2) ~ <button onclick="Powers.activate(2)" ~class=Powers.canActivate(2) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 2)~>~r Powers.descriptionStrengthRarity('stored', 2) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 2)~>~r Powers.descriptionMultiplier('stored', 2) ~</span>
                <br/>
                <button onclick="Powers.delete(2)" ~class=Powers.canDelete(2) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(2) ~ power shards)</button>
              </div>
            </td>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 3) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 3)~>~r Powers.descriptionEffect('stored', 3) ~ <button onclick="Powers.activate(3)" ~class=Powers.canActivate(3) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 3)~>~r Powers.descriptionStrengthRarity('stored', 3) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 3)~>~r Powers.descriptionMultiplier('stored', 3) ~</span>
                <br/>
                <button onclick="Powers.delete(3)" ~class=Powers.canDelete(3) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(3) ~ power shards)</button>
              </div>
            </td>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 4) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 4)~>~r Powers.descriptionEffect('stored', 4) ~ <button onclick="Powers.activate(4)" ~class=Powers.canActivate(4) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 4)~>~r Powers.descriptionStrengthRarity('stored', 4) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 4)~>~r Powers.descriptionMultiplier('stored', 4) ~</span>
                <br/>
                <button onclick="Powers.delete(4)" ~class=Powers.canDelete(4) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(4) ~ power shards)</button>
              </div>
            </td>
          </tr>
          <tr>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 5) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 5)~>~r Powers.descriptionEffect('stored', 5) ~ <button onclick="Powers.activate(5)" ~class=Powers.canActivate(5) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 5)~>~r Powers.descriptionStrengthRarity('stored', 5) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 5)~>~r Powers.descriptionMultiplier('stored', 5) ~</span>
                <br/>
                <button onclick="Powers.delete(5)" ~class=Powers.canDelete(5) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(5) ~ power shards)</button>
              </div>
            </td>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 6) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 6)~>~r Powers.descriptionEffect('stored', 6) ~ <button onclick="Powers.activate(6)" ~class=Powers.canActivate(6) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 6)~>~r Powers.descriptionStrengthRarity('stored', 6) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 6)~>~r Powers.descriptionMultiplier('stored', 6) ~</span>
                <br/>
                <button onclick="Powers.delete(6)" ~class=Powers.canDelete(6) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(6) ~ power shards)</button>
              </div>
            </td>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 7) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 7)~>~r Powers.descriptionEffect('stored', 7) ~ <button onclick="Powers.activate(7)" ~class=Powers.canActivate(7) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 7)~>~r Powers.descriptionStrengthRarity('stored', 7) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 7)~>~r Powers.descriptionMultiplier('stored', 7) ~</span>
                <br/>
                <button onclick="Powers.delete(7)" ~class=Powers.canDelete(7) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(7) ~ power shards)</button>
              </div>
            </td>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 8) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 8)~>~r Powers.descriptionEffect('stored', 8) ~  <button onclick="Powers.activate(8)" ~class=Powers.canActivate(8) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 8)~>~r Powers.descriptionStrengthRarity('stored', 8) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 8)~>~r Powers.descriptionMultiplier('stored', 8) ~</span>
                <br/>
                <button onclick="Powers.delete(8)" ~class=Powers.canDelete(8) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(8) ~ power shards)</button>
              </div>
            </td>
          </tr>
          <tr>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 9) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 9)~>~r Powers.descriptionEffect('stored', 9) ~  <button onclick="Powers.activate(9)" ~class=Powers.canActivate(9) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 9)~>~r Powers.descriptionStrengthRarity('stored', 9) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 9)~>~r Powers.descriptionMultiplier('stored', 9) ~</span>
                <br/>
                <button onclick="Powers.delete(9)" ~class=Powers.canDelete(9) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(9) ~ power shards)</button>
              </div>
            </td>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 10) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 10)~>~r Powers.descriptionEffect('stored', 10) ~  <button onclick="Powers.activate(10)" ~class=Powers.canActivate(10) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 10)~>~r Powers.descriptionStrengthRarity('stored', 10) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 10)~>~r Powers.descriptionMultiplier('stored', 10) ~</span>
                <br/>
                <button onclick="Powers.delete(10)" ~class=Powers.canDelete(10) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(10) ~ power shards)</button>
              </div>
            </td>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 11) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 11)~>~r Powers.descriptionEffect('stored', 11) ~ <button onclick="Powers.activate(11)" ~class=Powers.canActivate(11) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 11)~>~r Powers.descriptionStrengthRarity('stored', 11) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 11)~>~r Powers.descriptionMultiplier('stored', 11) ~</span>
                <br/>
                <button onclick="Powers.delete(11)" ~class=Powers.canDelete(11) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(11) ~ power shards)</button>
              </div>
            </td>
            <td class="largepowertd">
              <div ~style.display=Powers.canAccessPower('stored', 12) ? '' : 'none'~>
                <span ~class=Powers.color('stored', 12)~>~r Powers.descriptionEffect('stored', 12) ~ <button onclick="Powers.activate(12)" ~class=Powers.canActivate(12) ? '' : 'disabled'~>Activate</button></span>
                <br/>
                <span ~class=Powers.color('stored', 12)~>~r Powers.descriptionStrengthRarity('stored', 12) ~</span>
                <br/>
                <span ~class=Powers.color('stored', 12)~>~r Powers.descriptionMultiplier('stored', 12) ~</span>
                <br/>
                <button onclick="Powers.delete(12)" ~class=Powers.canDelete(12) ? '' : 'disabled'~>Delete (+~f PowerShards.shardGainStored(12) ~ power shards)</button>
              </div>
            </td>
          </tr>
        </table>
        <span>At most ~i Powers.maximumActivatedLimit() ~ power~s Powers.maximumActivatedLimit() ~ can be active at once.</span>
        <br/>
        <span>Thus, all but the best ~i Powers.maximumActivatedLimit() ~ power~s Powers.maximumActivatedLimit() ~ of each type are useless and are thus automatically deleted for power shards.</span>
        <br/>
        <button onclick="Powers.changePowerDeletionMode()">Manual power deletion mode: ~r Powers.powerDeletionMode() ~</button> <button onclick="Powers.changePowerDeactivationMode()">Single power deactivation mode: ~r Powers.powerDeactivationMode() ~</button>
        <br/>
        <br/>
        <span>You have ~i ComplexityPoints.amount() ~ complexity point~s ComplexityPoints.amount() ~. <button ~class=Powers.anythingToBuy() ? "" : "disabled"~ onclick="Powers.maxAll()">Max power upgrades</button></span>
        <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
          <tr>
            <td>Strength of new powers:</td>
            <td><span ~style.display=PowerUpgrade(1).atBoughtLimit() ? 'none' : ''~>~r formatWithPrecision(PowerUpgrade(1).effectDisplay(), 5) ~ → ~r formatWithPrecision(PowerUpgrade(1).nextEffectDisplay(), 5) ~</span><span ~style.display=PowerUpgrade(1).atBoughtLimit() ? '' : 'none'~>~r formatWithPrecision(PowerUpgrade(1).effectDisplay(), 5) ~ (maxed)</span></td>
            <td><span ~style.display=PowerUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(1).buy()">Cost: ~i PowerUpgrade(1).cost() ~ ℂP</button></span></td>
            <td><span ~style.display=PowerUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(1).buyMax()">Max</button></span></td>
            <td><span ~style.display=ComplexityAutobuyer(9).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(9).toggle()">Auto: ~r ComplexityAutobuyer(9).isOn() ? "On" : "Off" ~</button></span></td>
          </tr>
          <tr>
            <td>Speed of gaining new powers:</td>
            <td><span ~style.display=PowerUpgrade(2).atBoughtLimit() ? 'none' : ''~>~f PowerUpgrade(2).effectDisplay() ~x → ~f PowerUpgrade(2).nextEffectDisplay() ~x</span><span ~style.display=PowerUpgrade(2).atBoughtLimit() ? '' : 'none'~>~f PowerUpgrade(2).effectDisplay() ~x (maxed)</span></td>
            <td><span ~style.display=PowerUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(2).buy()">Cost: ~i PowerUpgrade(2).cost() ~ ℂP</button></span></td>
            <td><span ~style.display=PowerUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(2).buyMax()">Max</button></span></td>
            <td><span ~style.display=ComplexityAutobuyer(10).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(10).toggle()">Auto: ~r ComplexityAutobuyer(10).isOn() ? "On" : "Off" ~</button></span></td>
          </tr>
          <tr>
            <td>Minimum rarity of new powers:</td>
            <td><span ~style.display=PowerUpgrade(3).atBoughtLimit() ? 'none' : ''~>~f PowerUpgrade(3).effectDisplay() ~ → ~f PowerUpgrade(3).nextEffectDisplay() ~</span><span ~style.display=PowerUpgrade(3).atBoughtLimit() ? '' : 'none'~>~f PowerUpgrade(3).effectDisplay() ~ (maxed)</span></td>
            <td><span ~style.display=PowerUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(3).buy()">Cost: ~i PowerUpgrade(3).cost() ~ ℂP</button></span></td>
            <td><span ~style.display=PowerUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=PowerUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PowerUpgrade(3).buyMax()">Max</button></span></td>
            <td><span ~style.display=ComplexityAutobuyer(11).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(11).toggle()">Auto: ~r ComplexityAutobuyer(11).isOn() ? "On" : "Off" ~</button></span></td>
          </tr>
        </table>
        <br/>
        <div ~style.display=PowerShards.hasGainedShards() ? 'none' : ''~>
          <span>Power shards can be used to buy upgrades that give powers small additional multipliers, and to craft new powers.</span>
          <br/>
          <span>It is generally not recommended to delete any of your first few powers to get power shards.</span>
        </div>
        <div ~style.display=PowerShards.hasGainedShards() ? '' : 'none'~>
          <span>You have ~f PowerShards.amount() ~ power shards. <button ~class=PowerShards.anythingToBuy() ? "" : "disabled"~ onclick="PowerShards.maxAll()">Max power shard upgrades</button></span>
          <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
            <tr>
              <td class="yellowspan">Additional multiplier to normal generator powers:</td>
              <td><span ~style.display=PowerShardUpgrade(1).atBoughtLimit() ? 'none' : ''~>+~f PowerShardUpgrade(1).effect() ~ → +~f PowerShardUpgrade(1).nextEffect() ~</span><span ~style.display=PowerShardUpgrade(1).atBoughtLimit() ? '' : 'none'~>~f PowerShardUpgrade(1).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PowerShardUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(1).buy()">Cost: ~i PowerShardUpgrade(1).cost() ~ power shard~s PowerShardUpgrade(1).cost() ~</button></span></td>
              <td><span ~style.display=PowerShardUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(1).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(1).buyMax()">Max</button></span></td>
              <td><span ~style.display=ComplexityAutobuyer(12).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(12).toggle()">Auto: ~r ComplexityAutobuyer(12).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td class="magentaspan">Additional multiplier to infinity generator powers:</td>
              <td><span ~style.display=PowerShardUpgrade(2).atBoughtLimit() ? 'none' : ''~>+~f PowerShardUpgrade(2).effect() ~ → +~f PowerShardUpgrade(2).nextEffect() ~</span><span ~style.display=PowerShardUpgrade(2).atBoughtLimit() ? '' : 'none'~>~f PowerShardUpgrade(2).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PowerShardUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(2).buy()">Cost: ~i PowerShardUpgrade(2).cost() ~ power shard~s PowerShardUpgrade(2).cost() ~</button></span></td>
              <td><span ~style.display=PowerShardUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(2).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(2).buyMax()">Max</button></span></td>
              <td><span ~style.display=ComplexityAutobuyer(13).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(13).toggle()">Auto: ~r ComplexityAutobuyer(13).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td class="cyanspan">Additional multiplier to eternity generator powers:</td>
              <td><span ~style.display=PowerShardUpgrade(3).atBoughtLimit() ? 'none' : ''~>+~f PowerShardUpgrade(3).effect() ~ → +~f PowerShardUpgrade(3).nextEffect() ~</span><span ~style.display=PowerShardUpgrade(3).atBoughtLimit() ? '' : 'none'~>~f PowerShardUpgrade(3).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PowerShardUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(3).buy()">Cost: ~i PowerShardUpgrade(3).cost() ~ power shard~s PowerShardUpgrade(3).cost() ~</button></span></td>
              <td><span ~style.display=PowerShardUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(3).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(3).buyMax()">Max</button></span></td>
              <td><span ~style.display=ComplexityAutobuyer(14).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(14).toggle()">Auto: ~r ComplexityAutobuyer(14).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
            <tr>
              <td class="brownspan">Additional multiplier to complexity generator powers:</td>
              <td><span ~style.display=PowerShardUpgrade(4).atBoughtLimit() ? 'none' : ''~>+~f PowerShardUpgrade(4).effect() ~ → +~f PowerShardUpgrade(4).nextEffect() ~</span><span ~style.display=PowerShardUpgrade(4).atBoughtLimit() ? '' : 'none'~>~f PowerShardUpgrade(4).effect() ~ (maxed)</span></td>
              <td><span ~style.display=PowerShardUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(4).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(4).buy()">Cost: ~i PowerShardUpgrade(4).cost() ~ power shard~s PowerShardUpgrade(4).cost() ~</button></span></td>
              <td><span ~style.display=PowerShardUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=PowerShardUpgrade(4).canBuy() ? "" : "disabled"~ onclick="PowerShardUpgrade(4).buyMax()">Max</button></span></td>
              <td><span ~style.display=ComplexityAutobuyer(15).hasComplexityAutobuyer() ? '' : 'none'~><button onclick="ComplexityAutobuyer(15).toggle()">Auto: ~r ComplexityAutobuyer(15).isOn() ? "On" : "Off" ~</button></span></td>
            </tr>
          </table>
          <span>Power shard upgrade multipliers take effect after power and rarity, but before extra multipliers.</span>
          <br/>
          <br/>
          <span>Craft a power with type <select ~!value=PowerShards.craftedType()~ ~!onchange=function() {PowerShards.setCraftedType(this.value)}~>
            <option value="normal">normal</option>
            <option value="infinity">infinity</option>
            <option value="eternity">eternity</option>
            <option value="complexity">complexity</option>
          </select>,
          strength ~r formatWithPrecision(PowerShards.craftedStrength(), 5) ~, and rarity <input type="text" ~!value=PowerShards.craftedRarityDisplay()~ ~!onchange=function() {PowerShards.setCraftedRarity(this.value)}~></input>:
          <button ~class=PowerShards.canCraft() ? '' : 'disabled'~ onclick="PowerShards.craft()">Cost: ~f PowerShards.craftedPowerCost() ~ power shards</button></span>
          <br/>
          <span>You cannot craft powers with negative rarity or powers with rarity greater than ~f Powers.maximumRarity() ~ (the maximum rarity of generated powers).</span>
          <br/>
          <span>Crafting cost depends only on rarity (not on type), and is always at least twice the power shards gained from deletion.</span>
          <br/>
          <br/>
          <span>Crafted power<span ~style.display=Powers.craftedKept() ? 'none' : ''~> (will be automatically deleted due to being bad enough to be useless)</span>:</span>
          <br/>
          <span ~class=Powers.color('crafted', 1)~>~r Powers.descriptionFull('crafted', 1) ~</span>
        </div>
        <br/>
        <span>Power presets:</span>
        <br/>
        <div ~style.display=Powers.hasPreset(1) ? '' : 'none'~>
          Name: <input class="presetpowername1" type="text" ~!value=Powers.presetName(1)~ ~!onchange=function() {Powers.setPresetName(1, this.value)}~></input>
          Powers: <input class="presetpowerlist1" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(1)~ ~!onchange=function() {Powers.setPresetPowerList(1, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(1)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(1)">Load</button>
          <button onclick="Powers.presetDelete(1)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(2) ? '' : 'none'~>
          Name: <input class="presetpowername2" type="text" ~!value=Powers.presetName(2)~ ~!onchange=function() {Powers.setPresetName(2, this.value)}~></input>
          Powers: <input class="presetpowerlist2" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(2)~ ~!onchange=function() {Powers.setPresetPowerList(2, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(2)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(2)">Load</button>
          <button onclick="Powers.presetDelete(2)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(3) ? '' : 'none'~>
          Name: <input class="presetpowername3" type="text" ~!value=Powers.presetName(3)~ ~!onchange=function() {Powers.setPresetName(3, this.value)}~></input>
          Powers: <input class="presetpowerlist3" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(3)~ ~!onchange=function() {Powers.setPresetPowerList(3, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(3)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(3)">Load</button>
          <button onclick="Powers.presetDelete(3)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(4) ? '' : 'none'~>
          Name: <input class="presetpowername4" type="text" ~!value=Powers.presetName(4)~ ~!onchange=function() {Powers.setPresetName(4, this.value)}~></input>
          Powers: <input class="presetpowerlist4" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(4)~ ~!onchange=function() {Powers.setPresetPowerList(4, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(4)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(4)">Load</button>
          <button onclick="Powers.presetDelete(4)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(5) ? '' : 'none'~>
          Name: <input class="presetpowername5" type="text" ~!value=Powers.presetName(5)~ ~!onchange=function() {Powers.setPresetName(5, this.value)}~></input>
          Powers: <input class="presetpowerlist5" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(5)~ ~!onchange=function() {Powers.setPresetPowerList(5, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(5)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(5)">Load</button>
          <button onclick="Powers.presetDelete(5)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(6) ? '' : 'none'~>
          Name: <input class="presetpowername6" type="text" ~!value=Powers.presetName(6)~ ~!onchange=function() {Powers.setPresetName(6, this.value)}~></input>
          Powers: <input class="presetpowerlist6" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(6)~ ~!onchange=function() {Powers.setPresetPowerList(6, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(6)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(6)">Load</button>
          <button onclick="Powers.presetDelete(6)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(7) ? '' : 'none'~>
          Name: <input class="presetpowername7" type="text" ~!value=Powers.presetName(7)~ ~!onchange=function() {Powers.setPresetName(7, this.value)}~></input>
          Powers: <input class="presetpowerlist7" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(7)~ ~!onchange=function() {Powers.setPresetPowerList(7, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(7)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(7)">Load</button>
          <button onclick="Powers.presetDelete(7)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(8) ? '' : 'none'~>
          Name: <input class="presetpowername8" type="text" ~!value=Powers.presetName(8)~ ~!onchange=function() {Powers.setPresetName(8, this.value)}~></input>
          Powers: <input class="presetpowerlist8" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(8)~ ~!onchange=function() {Powers.setPresetPowerList(8, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(8)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(8)">Load</button>
          <button onclick="Powers.presetDelete(8)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(9) ? '' : 'none'~>
          Name: <input class="presetpowername9" type="text" ~!value=Powers.presetName(9)~ ~!onchange=function() {Powers.setPresetName(9, this.value)}~></input>
          Powers: <input class="presetpowerlist9" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(9)~ ~!onchange=function() {Powers.setPresetPowerList(9, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(9)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(9)">Load</button>
          <button onclick="Powers.presetDelete(9)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(10) ? '' : 'none'~>
          Name: <input class="presetpowername10" type="text" ~!value=Powers.presetName(10)~ ~!onchange=function() {Powers.setPresetName(10, this.value)}~></input>
          Powers: <input class="presetpowerlist10" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(10)~ ~!onchange=function() {Powers.setPresetPowerList(10, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(10)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(10)">Load</button>
          <button onclick="Powers.presetDelete(10)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(11) ? '' : 'none'~>
          Name: <input class="presetpowername11" type="text" ~!value=Powers.presetName(11)~ ~!onchange=function() {Powers.setPresetName(11, this.value)}~></input>
          Powers: <input class="presetpowerlist11" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(11)~ ~!onchange=function() {Powers.setPresetPowerList(11, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(11)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(11)">Load</button>
          <button onclick="Powers.presetDelete(11)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(12) ? '' : 'none'~>
          Name: <input class="presetpowername12" type="text" ~!value=Powers.presetName(12)~ ~!onchange=function() {Powers.setPresetName(12, this.value)}~></input>
          Powers: <input class="presetpowerlist12" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(12)~ ~!onchange=function() {Powers.setPresetPowerList(12, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(12)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(12)">Load</button>
          <button onclick="Powers.presetDelete(12)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(13) ? '' : 'none'~>
          Name: <input class="presetpowername13" type="text" ~!value=Powers.presetName(13)~ ~!onchange=function() {Powers.setPresetName(13, this.value)}~></input>
          Powers: <input class="presetpowerlist13" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(13)~ ~!onchange=function() {Powers.setPresetPowerList(13, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(13)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(13)">Load</button>
          <button onclick="Powers.presetDelete(13)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(14) ? '' : 'none'~>
          Name: <input class="presetpowername14" type="text" ~!value=Powers.presetName(14)~ ~!onchange=function() {Powers.setPresetName(14, this.value)}~></input>
          Powers: <input class="presetpowerlist14" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(14)~ ~!onchange=function() {Powers.setPresetPowerList(14, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(14)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(14)">Load</button>
          <button onclick="Powers.presetDelete(14)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(15) ? '' : 'none'~>
          Name: <input class="presetpowername15" type="text" ~!value=Powers.presetName(15)~ ~!onchange=function() {Powers.setPresetName(15, this.value)}~></input>
          Powers: <input class="presetpowerlist15" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(15)~ ~!onchange=function() {Powers.setPresetPowerList(15, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(15)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(15)">Load</button>
          <button onclick="Powers.presetDelete(15)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(16) ? '' : 'none'~>
          Name: <input class="presetpowername16" type="text" ~!value=Powers.presetName(16)~ ~!onchange=function() {Powers.setPresetName(16, this.value)}~></input>
          Powers: <input class="presetpowerlist16" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(16)~ ~!onchange=function() {Powers.setPresetPowerList(16, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(16)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(16)">Load</button>
          <button onclick="Powers.presetDelete(16)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(17) ? '' : 'none'~>
          Name: <input class="presetpowername17" type="text" ~!value=Powers.presetName(17)~ ~!onchange=function() {Powers.setPresetName(17, this.value)}~></input>
          Powers: <input class="presetpowerlist17" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(17)~ ~!onchange=function() {Powers.setPresetPowerList(17, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(17)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(17)">Load</button>
          <button onclick="Powers.presetDelete(17)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(18) ? '' : 'none'~>
          Name: <input class="presetpowername18" type="text" ~!value=Powers.presetName(18)~ ~!onchange=function() {Powers.setPresetName(18, this.value)}~></input>
          Powers: <input class="presetpowerlist18" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(18)~ ~!onchange=function() {Powers.setPresetPowerList(18, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(18)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(18)">Load</button>
          <button onclick="Powers.presetDelete(18)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(19) ? '' : 'none'~>
          Name: <input class="presetpowername19" type="text" ~!value=Powers.presetName(19)~ ~!onchange=function() {Powers.setPresetName(19, this.value)}~></input>
          Powers: <input class="presetpowerlist19" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(19)~ ~!onchange=function() {Powers.setPresetPowerList(19, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(19)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(19)">Load</button>
          <button onclick="Powers.presetDelete(19)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(20) ? '' : 'none'~>
          Name: <input class="presetpowername20" type="text" ~!value=Powers.presetName(20)~ ~!onchange=function() {Powers.setPresetName(20, this.value)}~></input>
          Powers: <input class="presetpowerlist20" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(20)~ ~!onchange=function() {Powers.setPresetPowerList(20, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(20)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(20)">Load</button>
          <button onclick="Powers.presetDelete(20)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(21) ? '' : 'none'~>
          Name: <input class="presetpowername21" type="text" ~!value=Powers.presetName(21)~ ~!onchange=function() {Powers.setPresetName(21, this.value)}~></input>
          Powers: <input class="presetpowerlist21" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(21)~ ~!onchange=function() {Powers.setPresetPowerList(21, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(21)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(21)">Load</button>
          <button onclick="Powers.presetDelete(21)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(22) ? '' : 'none'~>
          Name: <input class="presetpowername22" type="text" ~!value=Powers.presetName(22)~ ~!onchange=function() {Powers.setPresetName(22, this.value)}~></input>
          Powers: <input class="presetpowerlist22" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(22)~ ~!onchange=function() {Powers.setPresetPowerList(22, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(22)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(22)">Load</button>
          <button onclick="Powers.presetDelete(22)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(23) ? '' : 'none'~>
          Name: <input class="presetpowername23" type="text" ~!value=Powers.presetName(23)~ ~!onchange=function() {Powers.setPresetName(23, this.value)}~></input>
          Powers: <input class="presetpowerlist23" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(23)~ ~!onchange=function() {Powers.setPresetPowerList(23, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(23)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(23)">Load</button>
          <button onclick="Powers.presetDelete(23)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(24) ? '' : 'none'~>
          Name: <input class="presetpowername24" type="text" ~!value=Powers.presetName(24)~ ~!onchange=function() {Powers.setPresetName(24, this.value)}~></input>
          Powers: <input class="presetpowerlist24" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(24)~ ~!onchange=function() {Powers.setPresetPowerList(24, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(24)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(24)">Load</button>
          <button onclick="Powers.presetDelete(24)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(25) ? '' : 'none'~>
          Name: <input class="presetpowername25" type="text" ~!value=Powers.presetName(25)~ ~!onchange=function() {Powers.setPresetName(25, this.value)}~></input>
          Powers: <input class="presetpowerlist25" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(25)~ ~!onchange=function() {Powers.setPresetPowerList(25, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(25)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(25)">Load</button>
          <button onclick="Powers.presetDelete(25)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(26) ? '' : 'none'~>
          Name: <input class="presetpowername26" type="text" ~!value=Powers.presetName(26)~ ~!onchange=function() {Powers.setPresetName(26, this.value)}~></input>
          Powers: <input class="presetpowerlist26" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(26)~ ~!onchange=function() {Powers.setPresetPowerList(26, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(26)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(26)">Load</button>
          <button onclick="Powers.presetDelete(26)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(27) ? '' : 'none'~>
          Name: <input class="presetpowername27" type="text" ~!value=Powers.presetName(27)~ ~!onchange=function() {Powers.setPresetName(27, this.value)}~></input>
          Powers: <input class="presetpowerlist27" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(27)~ ~!onchange=function() {Powers.setPresetPowerList(27, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(27)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(27)">Load</button>
          <button onclick="Powers.presetDelete(27)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(28) ? '' : 'none'~>
          Name: <input class="presetpowername28" type="text" ~!value=Powers.presetName(28)~ ~!onchange=function() {Powers.setPresetName(28, this.value)}~></input>
          Powers: <input class="presetpowerlist28" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(28)~ ~!onchange=function() {Powers.setPresetPowerList(28, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(28)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(28)">Load</button>
          <button onclick="Powers.presetDelete(28)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(29) ? '' : 'none'~>
          Name: <input class="presetpowername29" type="text" ~!value=Powers.presetName(29)~ ~!onchange=function() {Powers.setPresetName(29, this.value)}~></input>
          Powers: <input class="presetpowerlist29" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(29)~ ~!onchange=function() {Powers.setPresetPowerList(29, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(29)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(29)">Load</button>
          <button onclick="Powers.presetDelete(29)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(30) ? '' : 'none'~>
          Name: <input class="presetpowername30" type="text" ~!value=Powers.presetName(30)~ ~!onchange=function() {Powers.setPresetName(30, this.value)}~></input>
          Powers: <input class="presetpowerlist30" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(30)~ ~!onchange=function() {Powers.setPresetPowerList(30, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(30)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(30)">Load</button>
          <button onclick="Powers.presetDelete(30)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(31) ? '' : 'none'~>
          Name: <input class="presetpowername31" type="text" ~!value=Powers.presetName(31)~ ~!onchange=function() {Powers.setPresetName(31, this.value)}~></input>
          Powers: <input class="presetpowerlist31" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(31)~ ~!onchange=function() {Powers.setPresetPowerList(31, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(31)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(31)">Load</button>
          <button onclick="Powers.presetDelete(31)">Delete</button>
        </div>
        <div ~style.display=Powers.hasPreset(32) ? '' : 'none'~>
          Name: <input class="presetpowername32" type="text" ~!value=Powers.presetName(32)~ ~!onchange=function() {Powers.setPresetName(32, this.value)}~></input>
          Powers: <input class="presetpowerlist32" style="width: 256px;" type="text" ~!value=Powers.presetPowerList(32)~ ~!onchange=function() {Powers.setPresetPowerList(32, this.value)}~></input>
          <button onclick="Powers.presetSetToCurrentPowers(32)">Set to current active powers</button>
          <button onclick="Powers.presetLoad(32)">Load</button>
          <button onclick="Powers.presetDelete(32)">Delete</button>
        </div>
        <span>
          <button ~style.display=Powers.hasPreset(32) ? 'none' : ''~ onclick="Powers.presetCreate()">Create a power preset</button>
          <span ~style.display=Powers.hasPreset(32) ? '' : 'none'~>You can create at most ~i 32 ~ power presets. Delete existing presets to create more.</span>
        </span>
        <br/>
        <span style="display: none;">Exported active powers (also copied to clipboard): <input id="powers-export-output"></input></span>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'oracle' ? '' : 'none'~>
      <div ~style.display=Oracle.isUnlocked() ? 'none' : ''~>
        <button style="height: 48px;" onclick="Oracle.unlock()" ~class=Oracle.canUnlock() ? '' : 'disabled'~>
          Unlock the Oracle<br/>Cost: ~f Oracle.unlockCost() ~ complexity points
        </button>
        <div>The Oracle is a quality-of-life feature that will let you see the future.</div>
        <div ~style.display=SpecialTabs.isTabVisible('galaxies') ?  'none' : ''~>Unlocking the Oracle for the first time will also let you view the Galaxies tab.</div>
      </div>
      <div ~style.display=Oracle.isUnlocked() ? '' : 'none'~>
        <span>Ask the Oracle to look <input type="text" ~!value=Oracle.displayTime()~ ~!onchange=function() {Oracle.setTime(+this.value)}~></input> second~s Oracle.displayTime() ~ into the future, using <input type="text" ~!value=Oracle.displayTicks()~ ~!onchange=function() {Oracle.setTicks(+this.value)}~></input> game tick~s Oracle.displayTicks() ~.</span>
        <br/>
        <span><button onclick="Oracle.invoke()">Get prediction</button> <button onclick="Oracle.toggleAlert()">Alert on prediction: ~r Oracle.alert() ? "On" : "Off" ~</button> <button onclick="Oracle.togglePowerDisplay()">Show future powers on prediction: ~r Oracle.powerDisplay() ? "On" : "Off" ~</button></span>
        <br/>
        <span><button onclick="Oracle.togglePowerFutureExtraMultipliers()">Show future power extra multipliers (as opposed to current): ~r Oracle.powerFutureExtraMultipliers() ? "On" : "Off" ~</button></span>
        <br/>
        <span>The Oracle can look between ~ti 0 ~ and ~ti Oracle.maxTime() ~ into the future,</span>
        <br/>
        <span>and can use between ~i 1 ~ and ~f Oracle.maxTicks() ~ game ticks (more than ~f Oracle.defaultTicks() ~ ticks may make it slow).</span>
        <br/>
        <span>You can press O to get a prediction from the Oracle on any tab.</span>
        <br/>
        <br/>
        <span>~r Oracle.messagePrequel() ~</span>
        <div class="oraclediv" ~style.display=Oracle.isUsed() ? '' : 'none'~>~r Oracle.message() ~</div>
        <br/>
        <br/>
        <div ~style.display=(Oracle.isUsed() && Oracle.powerDisplay()) ? '' : 'none'~>
          <span>Stored powers from the future:</span>
          <table style="margin-left: auto; margin-right: auto; border-collapse: collapse;">
            <tr>
              <td class="largepowertd">
                <span class="yellowspan">Normal</span>
                <br/>
                <span class="yellowspan">No extra multiplier</span>
                <br/>
                <br/>
                <br/>
              </td>
              <td class="largepowertd">
                <span class="magentaspan">Infinity</span>
                <br/>
                <span class="magentaspan">Extra multiplier from infinity stars</span>
                <br/>
                <br/>
                <span class="magentaspan">~f Powers.getExtraMultiplier('infinity', true) ~x</span>
              </td>
              <td class="largepowertd">
                <span class="cyanspan">Eternity</span>
                <br/>
                <span class="cyanspan">Extra multiplier from complexity stars and time in complexity</span>
                <br/>
                <span class="cyanspan">~f Powers.getExtraMultiplier('eternity', true) ~x<span ~style.display=Powers.isTypeAtCap('eternity', true) ? '' : 'none'~> (capped)</span></span>
              </td>
              <td class="largepowertd">
                <span class="brownspan">Complexity</span>
                <br/>
                <span class="brownspan">Extra multiplier from total strength and rarity of active powers</span>
                <br/>
                <span class="brownspan">~f Powers.getExtraMultiplier('complexity', true) ~x</span>
              </td>
            </tr>
            <tr>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 1) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 1)~>~r Powers.descriptionEffect('oracle', 1) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 1)~>~r Powers.descriptionStrengthRarity('oracle', 1) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 1)~>~r Powers.descriptionMultiplier('oracle', 1) ~</span>
                  <br/>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 2) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 2)~>~r Powers.descriptionEffect('oracle', 2) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 2)~>~r Powers.descriptionStrengthRarity('oracle', 2) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 2)~>~r Powers.descriptionMultiplier('oracle', 2) ~</span>
                  <br/>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 3) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 3)~>~r Powers.descriptionEffect('oracle', 3) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 3)~>~r Powers.descriptionStrengthRarity('oracle', 3) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 3)~>~r Powers.descriptionMultiplier('oracle', 3) ~</span>
                  <br/>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 4) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 4)~>~r Powers.descriptionEffect('oracle', 4) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 4)~>~r Powers.descriptionStrengthRarity('oracle', 4) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 4)~>~r Powers.descriptionMultiplier('oracle', 4) ~</span>
                  <br/>
                </div>
              </td>
            </tr>
            <tr>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 5) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 5)~>~r Powers.descriptionEffect('oracle', 5) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 5)~>~r Powers.descriptionStrengthRarity('oracle', 5) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 5)~>~r Powers.descriptionMultiplier('oracle', 5) ~</span>
                  <br/>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 6) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 6)~>~r Powers.descriptionEffect('oracle', 6) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 6)~>~r Powers.descriptionStrengthRarity('oracle', 6) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 6)~>~r Powers.descriptionMultiplier('oracle', 6) ~</span>
                  <br/>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 7) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 7)~>~r Powers.descriptionEffect('oracle', 7) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 7)~>~r Powers.descriptionStrengthRarity('oracle', 7) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 7)~>~r Powers.descriptionMultiplier('oracle', 7) ~</span>
                  <br/>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 8) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 8)~>~r Powers.descriptionEffect('oracle', 8) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 8)~>~r Powers.descriptionStrengthRarity('oracle', 8) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 8)~>~r Powers.descriptionMultiplier('oracle', 8) ~</span>
                  <br/>
                </div>
              </td>
            </tr>
            <tr>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 9) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 9)~>~r Powers.descriptionEffect('oracle', 9) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 9)~>~r Powers.descriptionStrengthRarity('oracle', 9) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 9)~>~r Powers.descriptionMultiplier('oracle', 9) ~</span>
                  <br/>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 10) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 10)~>~r Powers.descriptionEffect('oracle', 10) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 10)~>~r Powers.descriptionStrengthRarity('oracle', 10) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 10)~>~r Powers.descriptionMultiplier('oracle', 10) ~</span>
                  <br/>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 11) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 11)~>~r Powers.descriptionEffect('oracle', 11) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 11)~>~r Powers.descriptionStrengthRarity('oracle', 11) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 11)~>~r Powers.descriptionMultiplier('oracle', 11) ~</span>
                  <br/>
                </div>
              </td>
              <td class="smallpowertd">
                <div ~style.display=Powers.canAccessPower('oracle', 12) ? '' : 'none'~>
                  <span ~class=Powers.color('oracle', 12)~>~r Powers.descriptionEffect('oracle', 12) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 12)~>~r Powers.descriptionStrengthRarity('oracle', 12) ~</span>
                  <br/>
                  <span ~class=Powers.color('oracle', 12)~>~r Powers.descriptionMultiplier('oracle', 12) ~</span>
                  <br/>
                </div>
              </td>
            </tr>
          </table>
        </div>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'galaxies' ? '' : 'none'~>
      <div ~style.display=Galaxy.isUnlocked() ? 'none' : ''~>
        <button style="height: 48px;" onclick="Galaxy.unlock()" ~class=Galaxy.canUnlock() ? '' : 'disabled'~>
          Unlock Galaxies<br/>Cost: ~f Galaxy.unlockCost() ~ complexity points
        </button>
        <div ~style.display=FinalityMilestones.isFinalityMilestoneActive(1) ? 'none' : ''~>Unlocking galaxies will also give you autobuyers for complexity generators and power upgrades.</div>
      </div>
      <div ~style.display=Galaxy.isUnlocked() ? '' : 'none'~>
        <div ~style.display=FinalityMilestones.isFinalityMilestoneActive(1) ? 'none' : ''~>Due to unlocking galaxies, you have autobuyers for complexity generators and power upgrades.</div>
        <br ~style.display=FinalityMilestones.isFinalityMilestoneActive(1) ? 'none' : ''~/>
        <span>You have produced ~f Galaxy.totalStarsProducedThisFinality() ~ total stars this finality, making your star factor ~f Galaxy.starFactor() ~.</span>
        <br/>
        <span>You have produced ~f Galaxy.totalInfinityStarsProducedThisFinality() ~ total infinity stars this finality, making your infinity star factor ~f Galaxy.infinityStarFactor() ~.</span>
        <br/>
        <span>You have produced ~f Galaxy.totalEternityStarsProducedThisFinality() ~ total eternity stars this finality, making your eternity star factor ~f Galaxy.eternityStarFactor() ~.</span>
        <br/>
        <span>You have produced ~f Galaxy.totalComplexityStarsProducedThisFinality() ~ total <span ~style.display=FinalityMilestones.isFinalityMilestoneActive(5) ? '' : 'none'~>hyper</span>complexity stars this finality, making your complexity star factor ~f Galaxy.complexityStarFactor() ~.</span>
        <br/>
        <span>Your stellar product is ~f Galaxy.starFactor() ~ x ~f Galaxy.infinityStarFactor() ~ x ~f Galaxy.eternityStarFactor() ~ x ~f Galaxy.complexityStarFactor() ~ = ~f Galaxy.stellarProduct() ~.</span>
        <br/>
        <br/>
        <span>You have ~i Galaxy.stellarProductAmount() ~ (from stellar product) + ~i Galaxy.complexityPointAmount() ~ (from total ℂP this finality) <span ~style.display=Galaxy.finalityShardUpgradeAmount() === 0 ? 'none' : ''~>+ ~i Galaxy.finalityShardUpgradeAmount() ~ (from finality shard upgrade bonuses)</span> = ~i Galaxy.amount() ~ galax~y Galaxy.amount() ~.</span>
        <br/>
        <span>Next galaxies are at ~f Galaxy.nextStellarProductGalaxy() ~ stellar product and ~f Galaxy.nextComplexityPointGalaxy() ~ total ℂP this finality.</span>
        <br/>
        <span>Your galaxies are increasing the strength of new powers by ~r formatWithPrecision(Galaxy.getStrengthIncrease(), 5) ~.</span>
        <br/>
        <br/>
        <span>You have spent ~t player.stats.timeSinceComplexity ~ in this complexity, increasing chroma caps ^~r formatWithPrecision(Galaxy.effect(), 5) ~.</span>
        <br/>
        <br/>
        <span>You can make some of your galaxies dilated to make the galaxy effect increase faster, but have a lower cap.</span>
        <br/>
        <span>Currently ~i Galaxy.dilated() ~ galax~y Galaxy.dilated() ~ ~r Galaxy.dilated() === 1 ? 'is' : 'are' ~ dilated, making the galaxy effect have speed ~i Galaxy.effectSpeed() ~x and cap ~r formatWithPrecision(Galaxy.effectCap(), 5) ~, capping in ~t Galaxy.timeToReachEffectCap() ~.</span>
        <br/>
        <span>Next complexity ~i Galaxy.nextDilated() ~ galax~y Galaxy.nextDilated() ~ will be dilated, making the galaxy effect have speed ~i Galaxy.nextEffectSpeed() ~x and cap ~r formatWithPrecision(Galaxy.nextEffectCap(), 5) ~, capping in ~t Galaxy.nextTimeToReachEffectCap() ~.</span>
        <br/>
        <br/>
        <span>Galaxies to make dilated next complexity reset: <input class="nextdilatedinput" type="text" ~!value=Galaxy.nextDilatedRaw()~ ~!onchange=function() {Galaxy.setNextDilated(+this.value)}~></input></span>
        <br/>
        <span>(Set this to ~i 0 ~ to un-dilate all galaxies, or -x to dilate all but x galaxies.)</span>
        <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
        <span><button ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~ onclick="Galaxy.toggleResetDilatedOnFinality()">Reset dilated galaxies to ~i 0 ~ on finality: ~r Galaxy.isResetDilatedOnFinalityOn() ? "On" : "Off" ~</button></span>
      </div>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'finality' ? '' : 'none'~>
      <span>You have ~i FinalityPoints.amount() ~ finality point~s FinalityPoints.amount() ~ (FP).
        <button ~class=FinalityMaxAll.anythingToBuy() ? "" : "disabled"~ onclick="FinalityMaxAll.maxAll()">Max all</button>
      </span>
      <br/>
      <span>You have produced ~i FinalityPoints.totalFPProduced() ~ total finality point~s FinalityPoints.totalFPProduced() ~.</span>
      <br/>
      <span>You have ~i Finalities.amount() ~ finalit~y Finalities.amount() ~, multiplying all finality generators (FGs) by ~q Finalities.finalityGeneratorMultiplier() ~</span>
      <br/>
      <span>making the finality generator per-purchase multiplier ~q Finalities.finalityGeneratorPerPurchaseMultiplier() ~x,</span>
      <br/>
      <span>and <span ~style.display=EternityChallenge.autoECFromFinalities() ? '' : 'none'~>auto-completing an EC tier every ~tq Finalities.autoECCompletionTime() ~</span><span ~style.display=EternityChallenge.autoECFromFinalities() ? 'none' : ''~>never auto-completing an EC tier</span><span ~style.display=EternityChallenge.autoECFromComplexities() ? '' : 'none'~> (actually one EC tier per ~tq EternityChallenge.autoECCompletionTime() ~ due to complexities)</span>.</span>
      <br/>
      <span>You have ~f FinalityStars.amount() ~ finality stars, multiplying all non-finality generators by ~f FinalityStars.multiplier() ~x.</span>
      <br/>
      <span>You are getting ~f FinalityStars.perSecond() ~ finality stars per second.</span>
      <br/>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr ~style.display=FinalityGenerator(1).isVisible() ? '' : 'none'~>
          <td>Finality Generator 1</td>
          <td>~f FinalityGenerator(1).amount() ~</td>
          <td>~f FinalityGenerator(1).perSecond() ~/s</td>
          <td>~f FinalityGenerator(1).multiplier() ~x</td>
          <td><button ~class=FinalityGenerator(1).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(1).buy()">Cost: ~i FinalityGenerator(1).cost() ~ FP</button></td>
          <td><button ~class=FinalityGenerator(1).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(1).buyMax()">Max</button></td>
        </tr>
        <tr ~style.display=FinalityGenerator(2).isVisible() ? '' : 'none'~>
          <td>Finality Generator 2</td>
          <td>~f FinalityGenerator(2).amount() ~</td>
          <td>~f FinalityGenerator(2).perSecond() ~/s</td>
          <td>~f FinalityGenerator(2).multiplier() ~x</td>
          <td><button ~class=FinalityGenerator(2).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(2).buy()">Cost: ~i FinalityGenerator(2).cost() ~ FP</button></td>
          <td><button ~class=FinalityGenerator(2).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(2).buyMax()">Max</button></td>
        </tr>
        <tr ~style.display=FinalityGenerator(3).isVisible() ? '' : 'none'~>
          <td>Finality Generator 3</td>
          <td>~f FinalityGenerator(3).amount() ~</td>
          <td>~f FinalityGenerator(3).perSecond() ~/s</td>
          <td>~f FinalityGenerator(3).multiplier() ~x</td>
          <td><button ~class=FinalityGenerator(3).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(3).buy()">Cost: ~i FinalityGenerator(3).cost() ~ FP</button></td>
          <td><button ~class=FinalityGenerator(3).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(3).buyMax()">Max</button></td>
        </tr>
        <tr ~style.display=FinalityGenerator(4).isVisible() ? '' : 'none'~>
          <td>Finality Generator 4</td>
          <td>~f FinalityGenerator(4).amount() ~</td>
          <td>~f FinalityGenerator(4).perSecond() ~/s</td>
          <td>~f FinalityGenerator(4).multiplier() ~x</td>
          <td><button ~class=FinalityGenerator(4).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(4).buy()">Cost: ~i FinalityGenerator(4).cost() ~ FP</button></td>
          <td><button ~class=FinalityGenerator(4).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(4).buyMax()">Max</button></td>
        </tr>
        <tr ~style.display=FinalityGenerator(5).isVisible() ? '' : 'none'~>
          <td>Finality Generator 5</td>
          <td>~f FinalityGenerator(5).amount() ~</td>
          <td>~f FinalityGenerator(5).perSecond() ~/s</td>
          <td>~f FinalityGenerator(5).multiplier() ~x</td>
          <td><button ~class=FinalityGenerator(5).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(5).buy()">Cost: ~i FinalityGenerator(5).cost() ~ FP</button></td>
          <td><button ~class=FinalityGenerator(5).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(5).buyMax()">Max</button></td>
        </tr>
        <tr ~style.display=FinalityGenerator(6).isVisible() ? '' : 'none'~>
          <td>Finality Generator 6</td>
          <td>~f FinalityGenerator(6).amount() ~</td>
          <td>~f FinalityGenerator(6).perSecond() ~/s</td>
          <td>~f FinalityGenerator(6).multiplier() ~x</td>
          <td><button ~class=FinalityGenerator(6).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(6).buy()">Cost: ~i FinalityGenerator(6).cost() ~ FP</button></td>
          <td><button ~class=FinalityGenerator(6).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(6).buyMax()">Max</button></td>
        </tr>
        <tr ~style.display=FinalityGenerator(7).isVisible() ? '' : 'none'~>
          <td>Finality Generator 7</td>
          <td>~f FinalityGenerator(7).amount() ~</td>
          <td>~f FinalityGenerator(7).perSecond() ~/s</td>
          <td>~f FinalityGenerator(7).multiplier() ~x</td>
          <td><button ~class=FinalityGenerator(7).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(7).buy()">Cost: ~i FinalityGenerator(7).cost() ~ FP</button></td>
          <td><button ~class=FinalityGenerator(7).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(7).buyMax()">Max</button></td>
        </tr>
        <tr ~style.display=FinalityGenerator(8).isVisible() ? '' : 'none'~>
          <td>Finality Generator 8</td>
          <td>~f FinalityGenerator(8).amount() ~</td>
          <td>~f FinalityGenerator(8).perSecond() ~/s</td>
          <td>~f FinalityGenerator(8).multiplier() ~x</td>
          <td><button ~class=FinalityGenerator(8).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(8).buy()">Cost: ~i FinalityGenerator(8).cost() ~ FP</button></td>
          <td><button ~class=FinalityGenerator(8).canBuy() ? "" : "disabled"~ onclick="FinalityGenerator(8).buyMax()">Max</button></td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'finality-shards' ? '' : 'none'~>
      <span>You have ~i FinalityShards.total() ~ total finality shard~s FinalityShards.total() ~ and ~i FinalityShards.amount() ~ unspent finality shard~s FinalityShards.amount() ~ (FS).
        <button ~class=FinalityShards.anythingToBuy() ? "" : "disabled"~ onclick="FinalityShards.maxAll()">Max all</button>
      </span>
      <br/>
      <span>You will get ~i FinalityPrestigeLayer.finalityShardGain() ~ finality shard~s FinalityPrestigeLayer.finalityShardGain() ~ next finality.</span>
      <br/>
      <span>(This gain of finality shards is ~i 16 ~ times (~i 1 ~ + finalities), doubled if (~i 1 ~ + finalities) is a multiple of ~i 64 ~.)</span>
      <br/>
      <button class="finality-shard-upgrades-export-button" onclick="FinalityShardPresets.export()">Export finality shard upgrades</button> <button onclick="FinalityShardPresets.import()">Import finality shard upgrades</button>
      <button onclick="FinalityShardPresets.toggleRespec()">Respec finality shard upgrades on next finality: ~r FinalityShardPresets.isRespecOn() ? "On" : "Off" ~</button>
      <br/>
      <button onclick="FinalityShardPresets.respecAndReset()">Respec finality shard upgrades and ~r FinalityPrestigeLayer.resetText() ~</button></button>
      <br/>
      <br/>
      <div style="width: 1024px; margin-left: auto; margin-right: auto;">
        <span>Click on the name of a finality preset on the line below to buy those finality upgrades:</span>
        <br/>
        <button ~style.display=FinalityShardPresets.hasPreset(1) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(1)">~r FinalityShardPresets.presetName(1) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(2) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(2)">~r FinalityShardPresets.presetName(2) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(3) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(3)">~r FinalityShardPresets.presetName(3) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(4) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(4)">~r FinalityShardPresets.presetName(4) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(5) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(5)">~r FinalityShardPresets.presetName(5) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(6) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(6)">~r FinalityShardPresets.presetName(6) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(7) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(7)">~r FinalityShardPresets.presetName(7) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(8) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(8)">~r FinalityShardPresets.presetName(8) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(9) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(9)">~r FinalityShardPresets.presetName(9) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(10) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(10)">~r FinalityShardPresets.presetName(10) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(11) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(11)">~r FinalityShardPresets.presetName(11) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(12) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(12)">~r FinalityShardPresets.presetName(12) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(13) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(13)">~r FinalityShardPresets.presetName(13) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(14) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(14)">~r FinalityShardPresets.presetName(14) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(15) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(15)">~r FinalityShardPresets.presetName(15) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(16) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(16)">~r FinalityShardPresets.presetName(16) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(17) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(17)">~r FinalityShardPresets.presetName(17) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(18) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(18)">~r FinalityShardPresets.presetName(18) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(19) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(19)">~r FinalityShardPresets.presetName(19) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(20) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(20)">~r FinalityShardPresets.presetName(20) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(21) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(21)">~r FinalityShardPresets.presetName(21) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(22) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(22)">~r FinalityShardPresets.presetName(22) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(23) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(23)">~r FinalityShardPresets.presetName(23) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(24) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(24)">~r FinalityShardPresets.presetName(24) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(25) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(25)">~r FinalityShardPresets.presetName(25) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(26) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(26)">~r FinalityShardPresets.presetName(26) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(27) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(27)">~r FinalityShardPresets.presetName(27) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(28) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(28)">~r FinalityShardPresets.presetName(28) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(29) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(29)">~r FinalityShardPresets.presetName(29) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(30) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(30)">~r FinalityShardPresets.presetName(30) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(31) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(31)">~r FinalityShardPresets.presetName(31) ~</button>
        <button ~style.display=FinalityShardPresets.hasPreset(32) ? '' : 'none'~ onclick="FinalityShardPresets.presetLoad(32)">~r FinalityShardPresets.presetName(32) ~</button>
        <div ~style.display=FinalityShardPresets.hasPreset(1) ? 'none' : ''~>
          You don't currently have any finality presets. You can create presets at the bottom of this tab.
        </div>
      </div>
      <br/>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>Power to non-finality generator multipliers (~i FinalityShardUpgrade(1).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(1).atBoughtLimit() ? 'none' : ''~>^~r formatWithPrecision(FinalityShardUpgrade(1).effect(), 5) ~ → ^~r formatWithPrecision(FinalityShardUpgrade(1).nextEffect(), 5) ~</span><span ~style.display=FinalityShardUpgrade(1).atBoughtLimit() ? '' : 'none'~>^~r formatWithPrecision(FinalityShardUpgrade(1).effect(), 5) ~ (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(1).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(1).buy()">Cost: ~i FinalityShardUpgrade(1).cost() ~ finality shard~s FinalityShardUpgrade(1).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(1).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(1).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(1).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Finality point gain on finality (~i FinalityShardUpgrade(2).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(2).atBoughtLimit() ? 'none' : ''~>~i FinalityShardUpgrade(2).effect() ~ FP → ~i FinalityShardUpgrade(2).nextEffect() ~ FP</span><span ~style.display=FinalityShardUpgrade(2).atBoughtLimit() ? '' : 'none'~>~i FinalityShardUpgrade(2).effect() ~ FP (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(2).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(2).buy()">Cost: ~i FinalityShardUpgrade(2).cost() ~ finality shard~s FinalityShardUpgrade(2).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(2).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(2).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(2).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to eternity and permanence gain (~i FinalityShardUpgrade(3).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(3).atBoughtLimit() ? 'none' : ''~>~i FinalityShardUpgrade(3).effect() ~x → ~i FinalityShardUpgrade(3).nextEffect() ~x</span><span ~style.display=FinalityShardUpgrade(3).atBoughtLimit() ? '' : 'none'~>~i FinalityShardUpgrade(3).effect() ~x (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(3).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(3).buy()">Cost: ~i FinalityShardUpgrade(3).cost() ~ finality shard~s FinalityShardUpgrade(3).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(3).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(3).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(3).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to chroma buildup speed (~i FinalityShardUpgrade(4).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(4).atBoughtLimit() ? 'none' : ''~>~i FinalityShardUpgrade(4).effect() ~x → ~i FinalityShardUpgrade(4).nextEffect() ~x</span><span ~style.display=FinalityShardUpgrade(4).atBoughtLimit() ? '' : 'none'~>~i FinalityShardUpgrade(4).effect() ~x (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(4).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(4).buy()">Cost: ~i FinalityShardUpgrade(4).cost() ~ finality shard~s FinalityShardUpgrade(4).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(4).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(4).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(4).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to chroma cap (~i FinalityShardUpgrade(5).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(5).atBoughtLimit() ? 'none' : ''~>~f FinalityShardUpgrade(5).effect() ~x → ~f FinalityShardUpgrade(5).nextEffect() ~x</span><span ~style.display=FinalityShardUpgrade(5).atBoughtLimit() ? '' : 'none'~>~f FinalityShardUpgrade(5).effect() ~x (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(5).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(5).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(5).buy()">Cost: ~i FinalityShardUpgrade(5).cost() ~ finality shard~s FinalityShardUpgrade(5).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(5).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(5).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(5).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to power gain speed (~i FinalityShardUpgrade(6).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(6).atBoughtLimit() ? 'none' : ''~>~i FinalityShardUpgrade(6).effect() ~x → ~i FinalityShardUpgrade(6).nextEffect() ~x</span><span ~style.display=FinalityShardUpgrade(6).atBoughtLimit() ? '' : 'none'~>~i FinalityShardUpgrade(6).effect() ~x (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(6).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(6).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(6).buy()">Cost: ~i FinalityShardUpgrade(6).cost() ~ finality shard~s FinalityShardUpgrade(6).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(6).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(6).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(6).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Increase to strength of new powers (~i FinalityShardUpgrade(7).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(7).atBoughtLimit() ? 'none' : ''~>+~f FinalityShardUpgrade(7).effect() ~ → +~f FinalityShardUpgrade(7).nextEffect() ~</span><span ~style.display=FinalityShardUpgrade(7).atBoughtLimit() ? '' : 'none'~>+~f FinalityShardUpgrade(7).effect() ~ (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(7).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(7).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(7).buy()">Cost: ~i FinalityShardUpgrade(7).cost() ~ finality shard~s FinalityShardUpgrade(7).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(7).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(7).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(7).buyMax()">Max</button></span></td>
        </tr>
        <tr>
          <td>Multiplier to galaxy effect buildup speed (~i FinalityShardUpgrade(8).bought() ~):</td>
          <td><span ~style.display=FinalityShardUpgrade(8).atBoughtLimit() ? 'none' : ''~>~i FinalityShardUpgrade(8).effect() ~x → ~i FinalityShardUpgrade(8).nextEffect() ~x</span><span ~style.display=FinalityShardUpgrade(8).atBoughtLimit() ? '' : 'none'~>~i FinalityShardUpgrade(8).effect() ~x (maxed)</span></td>
          <td><span ~style.display=FinalityShardUpgrade(8).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(8).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(8).buy()">Cost: ~i FinalityShardUpgrade(8).cost() ~ finality shard~s FinalityShardUpgrade(8).cost() ~</button></span></td>
          <td><span ~style.display=FinalityShardUpgrade(8).atBoughtLimit() ? 'none' : ''~><button ~class=FinalityShardUpgrade(8).canBuy() ? "" : "disabled"~ onclick="FinalityShardUpgrade(8).buyMax()">Max</button></span></td>
        </tr>
      </table>
      <br ~style.display=Trivia.show('finality shard bought limits') ? '' : 'none'~/>
      <span ~style.display=Trivia.show('finality shard bought limits') ? '' : 'none'~>The first ~i 2 ~ finality shard upgrades can be bought up to ~i FinalityShardUpgrade(1).boughtLimit() ~ times; the other ~i 6 ~ can be bought up to ~i FinalityShardUpgrade(3).boughtLimit() ~ times.</span>
      <br/>
      <br/>
      <span>You have made ~i FinalityShards.totalUpgrades() ~ total finality shard upgrade purchase~s FinalityShards.totalUpgrades() ~, giving you starting bonuses with a strength of ~i FinalityShards.totalUpgradeBonuses() ~ (~i 1 ~ per ~i 4 ~ purchases):</span>
      <br ~style.display=FinalityStartingBenefits.stars().gt(0) ? '' : 'none'~>
      <span ~style.display=FinalityStartingBenefits.stars().gt(0) ? '' : 'none'~>You start each ~r PrestigeLayerNames.layersAbove('prestige') ~ with ~i FinalityStartingBenefits.stars() ~ extra star~s FinalityStartingBenefits.stars() ~.</span>
      <br ~style.display=FinalityStartingBenefits.infinityPoints().gt(0) ? '' : 'none'~/>
      <span ~style.display=FinalityStartingBenefits.infinityPoints().gt(0) ? '' : 'none'~>You start each ~r PrestigeLayerNames.layersAbove('eternity') ~ with ~i FinalityStartingBenefits.infinityPoints() ~ extra infinity point~s FinalityStartingBenefits.infinityPoints() ~.</span>
      <br ~style.display=FinalityStartingBenefits.eternityPoints().gt(0) ? '' : 'none'~/>
      <span ~style.display=FinalityStartingBenefits.eternityPoints().gt(0) ? '' : 'none'~>You start each ~r PrestigeLayerNames.layersAbove('complexity') ~ with ~i FinalityStartingBenefits.eternityPoints() ~ eternity point~s FinalityStartingBenefits.eternityPoints() ~.</span>
      <br ~style.display=FinalityStartingBenefits.anyComplexityStartingBenefits() ? '' : 'none'~/>
      <span ~style.display=FinalityStartingBenefits.anyComplexityStartingBenefits() ? '' : 'none'~>You start each ~r PrestigeLayerNames.layersAbove('finality') ~ with ~r FinalityStartingBenefits.complexityStartingBenefitsDisplay() ~.</span>
      <br ~style.display=FinalityStartingBenefits.anyGalaxies() ? '' : 'none'~/>
      <span ~style.display=FinalityStartingBenefits.anyGalaxies() ? '' : 'none'~>You start with ~i FinalityStartingBenefits.galaxies() ~ extra galax~y FinalityStartingBenefits.galaxies() ~ after unlocking galaxies.</span>
      <br ~style.display=Trivia.show('complexity achievement order') ? '' : 'none'~/>
      <span ~style.display=Trivia.show('complexity achievement order') ? '' : 'none'~>(Starting complexity achievements are given top-to-bottom, and left-to-right within each row.)</span>
      <br/>
      <br/>
      <span>Finality presets:</span>
      <br/>
      <div ~style.display=FinalityShardPresets.hasPreset(1) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename1" type="text" ~!value=FinalityShardPresets.presetName(1)~ ~!onchange=function() {FinalityShardPresets.setPresetName(1, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist1" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(1)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(1, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(1)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(1)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(1)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(2) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename2" type="text" ~!value=FinalityShardPresets.presetName(2)~ ~!onchange=function() {FinalityShardPresets.setPresetName(2, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist2" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(2)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(2, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(2)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(2)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(2)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(3) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename3" type="text" ~!value=FinalityShardPresets.presetName(3)~ ~!onchange=function() {FinalityShardPresets.setPresetName(3, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist3" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(3)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(3, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(3)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(3)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(3)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(4) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename4" type="text" ~!value=FinalityShardPresets.presetName(4)~ ~!onchange=function() {FinalityShardPresets.setPresetName(4, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist4" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(4)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(4, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(4)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(4)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(4)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(5) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename5" type="text" ~!value=FinalityShardPresets.presetName(5)~ ~!onchange=function() {FinalityShardPresets.setPresetName(5, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist5" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(5)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(5, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(5)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(5)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(5)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(6) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename6" type="text" ~!value=FinalityShardPresets.presetName(6)~ ~!onchange=function() {FinalityShardPresets.setPresetName(6, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist6" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(6)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(6, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(6)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(6)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(6)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(7) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename7" type="text" ~!value=FinalityShardPresets.presetName(7)~ ~!onchange=function() {FinalityShardPresets.setPresetName(7, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist7" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(7)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(7, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(7)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(7)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(7)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(8) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename8" type="text" ~!value=FinalityShardPresets.presetName(8)~ ~!onchange=function() {FinalityShardPresets.setPresetName(8, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist8" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(8)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(8, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(8)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(8)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(8)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(9) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename9" type="text" ~!value=FinalityShardPresets.presetName(9)~ ~!onchange=function() {FinalityShardPresets.setPresetName(9, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist9" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(9)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(9, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(9)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(9)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(9)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(10) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename10" type="text" ~!value=FinalityShardPresets.presetName(10)~ ~!onchange=function() {FinalityShardPresets.setPresetName(10, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist10" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(10)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(10, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(10)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(10)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(10)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(11) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename11" type="text" ~!value=FinalityShardPresets.presetName(11)~ ~!onchange=function() {FinalityShardPresets.setPresetName(11, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist11" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(11)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(11, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(11)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(11)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(11)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(12) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename12" type="text" ~!value=FinalityShardPresets.presetName(12)~ ~!onchange=function() {FinalityShardPresets.setPresetName(12, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist12" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(12)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(12, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(12)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(12)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(12)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(13) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename13" type="text" ~!value=FinalityShardPresets.presetName(13)~ ~!onchange=function() {FinalityShardPresets.setPresetName(13, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist13" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(13)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(13, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(13)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(13)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(13)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(14) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename14" type="text" ~!value=FinalityShardPresets.presetName(14)~ ~!onchange=function() {FinalityShardPresets.setPresetName(14, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist14" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(14)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(14, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(14)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(14)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(14)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(15) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename15" type="text" ~!value=FinalityShardPresets.presetName(15)~ ~!onchange=function() {FinalityShardPresets.setPresetName(15, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist15" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(15)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(15, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(15)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(15)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(15)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(16) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradeame16" type="text" ~!value=FinalityShardPresets.presetName(16)~ ~!onchange=function() {FinalityShardPresets.setPresetName(16, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist16" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(16)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(16, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(16)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(16)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(16)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(17) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename17" type="text" ~!value=FinalityShardPresets.presetName(17)~ ~!onchange=function() {FinalityShardPresets.setPresetName(17, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist17" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(17)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(17, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(17)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(17)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(17)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(18) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename18" type="text" ~!value=FinalityShardPresets.presetName(18)~ ~!onchange=function() {FinalityShardPresets.setPresetName(18, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist18" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(18)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(18, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(18)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(18)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(18)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(19) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename19" type="text" ~!value=FinalityShardPresets.presetName(19)~ ~!onchange=function() {FinalityShardPresets.setPresetName(19, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist19" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(19)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(19, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(19)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(19)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(19)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(20) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename20" type="text" ~!value=FinalityShardPresets.presetName(20)~ ~!onchange=function() {FinalityShardPresets.setPresetName(20, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist20" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(20)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(20, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(20)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(20)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(20)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(21) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename21" type="text" ~!value=FinalityShardPresets.presetName(21)~ ~!onchange=function() {FinalityShardPresets.setPresetName(21, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist21" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(21)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(21, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(21)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(21)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(21)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(22) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename22" type="text" ~!value=FinalityShardPresets.presetName(22)~ ~!onchange=function() {FinalityShardPresets.setPresetName(22, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist22" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(22)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(22, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(22)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(22)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(22)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(23) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename23" type="text" ~!value=FinalityShardPresets.presetName(23)~ ~!onchange=function() {FinalityShardPresets.setPresetName(23, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist23" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(23)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(23, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(23)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(23)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(23)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(24) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename24" type="text" ~!value=FinalityShardPresets.presetName(24)~ ~!onchange=function() {FinalityShardPresets.setPresetName(24, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist24" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(24)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(24, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(24)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(24)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(24)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(25) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename25" type="text" ~!value=FinalityShardPresets.presetName(25)~ ~!onchange=function() {FinalityShardPresets.setPresetName(25, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist25" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(25)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(25, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(25)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(25)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(25)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(26) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename26" type="text" ~!value=FinalityShardPresets.presetName(26)~ ~!onchange=function() {FinalityShardPresets.setPresetName(26, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist26" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(26)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(26, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(26)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(26)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(26)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(27) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename27" type="text" ~!value=FinalityShardPresets.presetName(27)~ ~!onchange=function() {FinalityShardPresets.setPresetName(27, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist27" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(27)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(27, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(27)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(27)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(27)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(28) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename28" type="text" ~!value=FinalityShardPresets.presetName(28)~ ~!onchange=function() {FinalityShardPresets.setPresetName(28, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist28" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(28)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(28, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(28)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(28)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(28)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(29) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename29" type="text" ~!value=FinalityShardPresets.presetName(29)~ ~!onchange=function() {FinalityShardPresets.setPresetName(29, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist29" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(29)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(29, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(29)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(29)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(29)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(30) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename30" type="text" ~!value=FinalityShardPresets.presetName(30)~ ~!onchange=function() {FinalityShardPresets.setPresetName(30, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist30" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(30)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(30, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(30)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(30)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(30)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(31) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename31" type="text" ~!value=FinalityShardPresets.presetName(31)~ ~!onchange=function() {FinalityShardPresets.setPresetName(31, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist31" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(31)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(31, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(31)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(31)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(31)">Delete</button>
      </div>
      <div ~style.display=FinalityShardPresets.hasPreset(32) ? '' : 'none'~>
        Name: <input class="presetfinalityshardupgradename32" type="text" ~!value=FinalityShardPresets.presetName(32)~ ~!onchange=function() {FinalityShardPresets.setPresetName(32, this.value)}~></input>
        Finality upgrades: <input class="presetfinalityshardupgradelist32" style="width: 256px;" type="text" ~!value=FinalityShardPresets.presetFinalityShardUpgradeList(32)~ ~!onchange=function() {FinalityShardPresets.setPresetFinalityShardUpgradeList(32, this.value)}~></input>
        <button onclick="FinalityShardPresets.presetSetToCurrentFinalityShardUpgrades(32)">Set to current finality upgrades</button>
        <button onclick="FinalityShardPresets.presetLoad(32)">Load</button>
        <button onclick="FinalityShardPresets.presetDelete(32)">Delete</button>
      </div>
      <span>
        <button ~style.display=FinalityShardPresets.hasPreset(32) ? 'none' : ''~ onclick="FinalityShardPresets.presetCreate()">Create a finality preset</button>
        <span ~style.display=FinalityShardPresets.hasPreset(32) ? '' : 'none'~>You can create at most ~i 32 ~ finality presets. Delete existing presets to create more.</span>
      </span>
      <br/>
      <span style="display: none;">Exported finality shard upgrades (also copied to clipboard): <input id="finality-shard-upgrades-export-output"></input></span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'finality-milestones' ? '' : 'none'~>
      <span>
        You have ~q Finalities.amount() ~ finalit~y Finalities.amount() ~.
      </span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(1)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(1) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(1) ~
              <br/>
              Remove the complexity unlock requirements for complexity challenges, and always have autobuyers for complexity generator and power upgrades.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(2)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(2) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(2) ~
              <br/>
              Start each ~r PrestigeLayerNames.layersAbove('finality') ~ with ~i FinalityMilestones.rawStartingComplexityPoints() ~ ℂP, and keep completions of each complexity challenge on ~r PrestigeLayerNames.layersAbove('finality') ~ based on your finalities (currently ~i FinalityMilestones.rawKeptComplexityChallenges() ~)
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(3)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(3) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(3) ~
              <br/>
              Unlock study list auto-load.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(4)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(4) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(4) ~
              <br/>
              Unlock autobuyers for power shard upgrades, and automatically gain permanence every second without needing to reset eternities.
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(5)~ style="font-size: 0.875rem;">
              ~i FinalityMilestones.getFinalityMilestoneRequirement(5) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(5) ~
              <br/>
              Complexity Challenge 6 reward strength and total complexity stars are based on hypercomplexity stars, which are what your complexity stars would be if your best ~i Powers.activatedLimit() ~  complexity power~s Powers.activatedLimit() ~ were active.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(6)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(6) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(6) ~
              <br/>
              Always have EP generation, and automatically swap active powers with better stored powers of the same type.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(7)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(7) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(7) ~
              <br/>
              Unlock active powers auto-load.
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(8)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(8) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(8) ~
              <br/>
              Automatically unlock powers, the Oracle, and galaxies when possible, and get a finality autobuyer.
            </div>
          </td>
        </tr>
        <tr>
          <td></td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(9)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(9) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(9) ~
              <br/>
              For galaxy effect and eternity power extra multipliers, you start each ~r PrestigeLayerNames.layersAbove('complexity') ~ with time in complexity based on your finalities (currently ~t FinalityMilestones.rawFreeTimeInComplexity() ~)
            </div>
          </td>
          <td>
            <div class="finalitymilestonediv" ~style.background=FinalityMilestones.color(10)~>
              ~i FinalityMilestones.getFinalityMilestoneRequirement(10) ~ finalities
              <br/>
              ~r FinalityMilestones.milestoneStatusDescription(10) ~
              <br/>
              You gain your complexity points on complexity every second, without needing to complexity (ℂP generation).
            </div>
          </td>
          <td></td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'goals' ? '' : 'none'~>
      <span>You have completed ~i Goals.numberOfGoalsCompleted() ~/~i Goals.numberOfGoals() ~ goals.</span>
      <br/>
      <span>By default, only goals up to the next goal after the last completed goal are displayed. <button onclick="Goals.toggleDisplayAllGoals()">Display all goals: ~r Goals.displayAllGoals() ? "On" : "Off" ~</button></span>
      <br/>
      <span>There is no in-game reward for completing goals, but you win the game (and have finished it) when you complete them all.</span>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 0px; border-collapse: separate;">
        <tr>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(1)~>
              ~r Goals.getGoalText(1) ~
              <br/>
              ~r Goals.getGoalStatusDescription(1) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(2)~>
              ~r Goals.getGoalText(2) ~
              <br/>
              ~r Goals.getGoalStatusDescription(2) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(3)~>
              ~r Goals.getGoalText(3) ~
              <br/>
              ~r Goals.getGoalStatusDescription(3) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(4)~>
              ~r Goals.getGoalText(4) ~
              <br/>
              ~r Goals.getGoalStatusDescription(4) ~
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(5)~>
              ~r Goals.getGoalText(5) ~
              <br/>
              ~r Goals.getGoalStatusDescription(5) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(6)~>
              ~r Goals.getGoalText(6) ~
              <br/>
              ~r Goals.getGoalStatusDescription(6) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(7)~>
              ~r Goals.getGoalText(7) ~
              <br/>
              ~r Goals.getGoalStatusDescription(7) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(8)~>
              ~r Goals.getGoalText(8) ~
              <br/>
              ~r Goals.getGoalStatusDescription(8) ~
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(9)~>
              ~r Goals.getGoalText(9) ~
              <br/>
              ~r Goals.getGoalStatusDescription(9) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(10)~>
              ~r Goals.getGoalText(10) ~
              <br/>
              ~r Goals.getGoalStatusDescription(10) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(11)~>
              ~r Goals.getGoalText(11) ~
              <br/>
              ~r Goals.getGoalStatusDescription(11) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(12)~>
              ~r Goals.getGoalText(12) ~
              <br/>
              ~r Goals.getGoalStatusDescription(12) ~
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(13)~>
              ~r Goals.getGoalText(13) ~
              <br/>
              ~r Goals.getGoalStatusDescription(13) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(14)~>
              ~r Goals.getGoalText(14) ~
              <br/>
              ~r Goals.getGoalStatusDescription(14) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(15)~>
              ~r Goals.getGoalText(15) ~
              <br/>
              ~r Goals.getGoalStatusDescription(15) ~
            </div>
          </td>
          <td>
            <div class="goaldiv" ~style.background=Goals.color(16)~>
              ~r Goals.getGoalText(16) ~
              <br/>
              ~r Goals.getGoalStatusDescription(16) ~
            </div>
          </td>
        </tr>
      </table>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'statistics' ? '' : 'none'~>
      <span>You have produced ~f player.stats.totalStarsProduced ~ total stars.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>You have produced ~f player.stats.totalStarsProducedThisEternity ~ stars this eternity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>You have produced ~f player.stats.totalStarsProducedThisComplexity ~ stars this complexity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>You have produced ~f player.stats.totalStarsProducedThisFinality ~ stars this finality.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>You have produced ~i player.stats.totalIPProduced ~ total infinity point~s player.stats.totalIPProduced ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>You have produced ~i player.stats.totalIPProducedThisEternity ~ infinity point~s player.stats.totalIPProducedThisEternity ~ this eternity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>You have produced ~i player.stats.totalEPProduced ~ total eternity point~s player.stats.totalEPProduced ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>You have produced ~i player.stats.totalEPProducedThisComplexity ~ total eternity point~s player.stats.totalEPProducedThisComplexity ~ this complexity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>You have produced ~i player.stats.totalCPProduced ~ total complexity point~s player.stats.totalCPProduced ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>You have produced ~i player.stats.totalCPProducedThisFinality ~ total complexity point~s player.stats.totalCPProducedThisFinality ~ this finality.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>You have produced ~i player.stats.totalFPProduced ~ total finality point~s player.stats.totalFPProduced ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>You have ~i player.infinities ~ infinit~y player.infinities ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>You have ~q player.eternities ~ eternit~y player.eternities ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>You have ~i player.complexities ~ complexit~y player.complexities ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>You have ~i player.finalities ~ finalit~y player.finalities ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>Your fastest infinity took ~t player.stats.fastestInfinity ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>Your fastest eternity took ~t player.stats.fastestEternity ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>Your fastest complexity took ~t player.stats.fastestComplexity ~.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>Your fastest finality took ~t player.stats.fastestFinality ~.</span>
      <br/>
      <span>You have spent ~t player.stats.timeSincePurchase ~ without purchasing anything.</span>
      <br/>
      <span>You have spent ~t player.stats.timeSinceSacrifice ~ without sacrificing.</span>
      <br/>
      <span>You have spent ~t player.stats.timeSincePrestige ~ in this prestige.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>You have spent ~t player.stats.timeSinceInfinity ~ in this infinity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>You have spent ~t player.stats.timeSinceEternity ~ in this eternity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>You have spent ~t player.stats.timeSinceComplexity ~ in this complexity.</span>
      <br ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~/>
      <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>You have spent ~t player.stats.timeSinceFinality ~ in this finality.</span>
      <br/>
      <span>You have spent ~t player.stats.timeSinceGameStart ~ playing this game (counting time offline).</span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'last-ten-runs' ? '' : 'none'~>
      <div ~style.display=Stats.showRun(1, 'infinity') ? '' : 'none'~>
        <span>Last infinity took ~t player.stats.lastTenInfinities[0][0] ~ and gave ~i player.stats.lastTenInfinities[0][1] ~ IP, giving ~f player.stats.lastTenInfinities[0][2] ~ IP/second.</span>
        <br ~style.display=Stats.showAnyRuns(2) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(2, 'infinity') ? '' : 'none'~>The infinity two infinities ago took ~t player.stats.lastTenInfinities[1][0] ~ and gave ~i player.stats.lastTenInfinities[1][1] ~ IP, giving ~f player.stats.lastTenInfinities[1][2] ~ IP/second.</span>
        <br ~style.display=Stats.showAnyRuns(3) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(3, 'infinity') ? '' : 'none'~>The infinity three infinities ago took ~t player.stats.lastTenInfinities[2][0] ~ and gave ~i player.stats.lastTenInfinities[2][1] ~ IP, giving ~f player.stats.lastTenInfinities[2][2] ~ IP/second.</span>
        <br ~style.display=Stats.showAnyRuns(4) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(4, 'infinity')  ? '' : 'none'~>The infinity four infinities ago took ~t player.stats.lastTenInfinities[3][0] ~ and gave ~i player.stats.lastTenInfinities[3][1] ~ IP, giving ~f player.stats.lastTenInfinities[3][2] ~ IP/second.</span>
        <br ~style.display=Stats.showAnyRuns(5) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(5, 'infinity') ? '' : 'none'~>The infinity five infinities ago took ~t player.stats.lastTenInfinities[4][0] ~ and gave ~i player.stats.lastTenInfinities[4][1] ~ IP, giving ~f player.stats.lastTenInfinities[4][2] ~ IP/second.</span>
        <br ~style.display=Stats.showAnyRuns(6) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(6, 'infinity') ? '' : 'none'~>The infinity six infinities ago took ~t player.stats.lastTenInfinities[5][0] ~ and gave ~i player.stats.lastTenInfinities[5][1] ~ IP, giving ~f player.stats.lastTenInfinities[5][2] ~ IP/second.</span>
        <br ~style.display=Stats.showAnyRuns(7) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(7, 'infinity') ? '' : 'none'~>The infinity seven infinities ago took ~t player.stats.lastTenInfinities[6][0] ~ and gave ~i player.stats.lastTenInfinities[6][1] ~ IP, giving ~f player.stats.lastTenInfinities[6][2] ~ IP/second.</span>
        <br ~style.display=Stats.showAnyRuns(8) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(8, 'infinity')  ? '' : 'none'~>The infinity eight infinities ago took ~t player.stats.lastTenInfinities[7][0] ~ and gave ~i player.stats.lastTenInfinities[7][1] ~ IP, giving ~f player.stats.lastTenInfinities[7][2] ~ IP/second.</span>
        <br ~style.display=Stats.showAnyRuns(9) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(9, 'infinity')  ? '' : 'none'~>The infinity nine infinities ago took ~t player.stats.lastTenInfinities[8][0] ~ and gave ~i player.stats.lastTenInfinities[8][1] ~ IP, giving ~f player.stats.lastTenInfinities[8][2] ~ IP/second.</span>
        <br ~style.display=Stats.showAnyRuns(10) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(10, 'infinity')  ? '' : 'none'~>The infinity ten infinities ago took ~t player.stats.lastTenInfinities[9][0] ~ and gave ~i player.stats.lastTenInfinities[9][1] ~ IP, giving ~f player.stats.lastTenInfinities[9][2] ~ IP/second.</span>
        <br/>
      </div>
      <div ~style.display=Stats.showRun(1, 'eternity') ? '' : 'none'~>
        <span>Last eternity took ~t player.stats.lastTenEternities[0][0] ~ and gave ~i player.stats.lastTenEternities[0][1] ~ EP, giving ~f player.stats.lastTenEternities[0][2] ~ EP/second.</span>
        <br ~style.display=Stats.showAnyRuns(2) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(2, 'eternity') ? '' : 'none'~>The eternity two eternities ago took ~t player.stats.lastTenEternities[1][0] ~ and gave ~i player.stats.lastTenEternities[1][1] ~ EP, giving ~f player.stats.lastTenEternities[1][2] ~ EP/second.</span>
        <br ~style.display=Stats.showAnyRuns(3) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(3, 'eternity') ? '' : 'none'~>The eternity three eternities ago took ~t player.stats.lastTenEternities[2][0] ~ and gave ~i player.stats.lastTenEternities[2][1] ~ EP, giving ~f player.stats.lastTenEternities[2][2] ~ EP/second.</span>
        <br ~style.display=Stats.showAnyRuns(4) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(4, 'eternity')  ? '' : 'none'~>The eternity four eternities ago took ~t player.stats.lastTenEternities[3][0] ~ and gave ~i player.stats.lastTenEternities[3][1] ~ EP, giving ~f player.stats.lastTenEternities[3][2] ~ EP/second.</span>
        <br ~style.display=Stats.showAnyRuns(5) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(5, 'eternity') ? '' : 'none'~>The eternity five eternities ago took ~t player.stats.lastTenEternities[4][0] ~ and gave ~i player.stats.lastTenEternities[4][1] ~ EP, giving ~f player.stats.lastTenEternities[4][2] ~ EP/second.</span>
        <br ~style.display=Stats.showAnyRuns(6) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(6, 'eternity') ? '' : 'none'~>The eternity six eternities ago took ~t player.stats.lastTenEternities[5][0] ~ and gave ~i player.stats.lastTenEternities[5][1] ~ EP, giving ~f player.stats.lastTenEternities[5][2] ~ EP/second.</span>
        <br ~style.display=Stats.showAnyRuns(7) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(7, 'eternity') ? '' : 'none'~>The eternity seven eternities ago took ~t player.stats.lastTenEternities[6][0] ~ and gave ~i player.stats.lastTenEternities[6][1] ~ EP, giving ~f player.stats.lastTenEternities[6][2] ~ EP/second.</span>
        <br ~style.display=Stats.showAnyRuns(8) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(8, 'eternity')  ? '' : 'none'~>The eternity eight eternities ago took ~t player.stats.lastTenEternities[7][0] ~ and gave ~i player.stats.lastTenEternities[7][1] ~ EP, giving ~f player.stats.lastTenEternities[7][2] ~ EP/second.</span>
        <br ~style.display=Stats.showAnyRuns(9) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(9, 'eternity')  ? '' : 'none'~>The eternity nine eternities ago took ~t player.stats.lastTenEternities[8][0] ~ and gave ~i player.stats.lastTenEternities[8][1] ~ EP, giving ~f player.stats.lastTenEternities[8][2] ~ EP/second.</span>
        <br ~style.display=Stats.showAnyRuns(10) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(10, 'eternity')  ? '' : 'none'~>The eternity ten eternities ago took ~t player.stats.lastTenEternities[9][0] ~ and gave ~i player.stats.lastTenEternities[9][1] ~ EP, giving ~f player.stats.lastTenEternities[9][2] ~ EP/second.</span>
        <br/>
      </div>
      <div ~style.display=Stats.showRun(1, 'complexity') ? '' : 'none'~>
        <span>Last complexity took ~t player.stats.lastTenComplexities[0][0] ~ and gave ~i player.stats.lastTenComplexities[0][1] ~ ℂP, giving ~f player.stats.lastTenComplexities[0][2] ~ ℂP/second.</span>
        <br ~style.display=Stats.showAnyRuns(2) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(2, 'complexity') ? '' : 'none'~>The complexity two complexities ago took ~t player.stats.lastTenComplexities[1][0] ~ and gave ~i player.stats.lastTenComplexities[1][1] ~ ℂP, giving ~f player.stats.lastTenComplexities[1][2] ~ ℂP/second.</span>
        <br ~style.display=Stats.showAnyRuns(3) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(3, 'complexity') ? '' : 'none'~>The complexity three complexities ago took ~t player.stats.lastTenComplexities[2][0] ~ and gave ~i player.stats.lastTenComplexities[2][1] ~ ℂP, giving ~f player.stats.lastTenComplexities[2][2] ~ ℂP/second.</span>
        <br ~style.display=Stats.showAnyRuns(4) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(4, 'complexity')  ? '' : 'none'~>The complexity four complexities ago took ~t player.stats.lastTenComplexities[3][0] ~ and gave ~i player.stats.lastTenComplexities[3][1] ~ ℂP, giving ~f player.stats.lastTenComplexities[3][2] ~ ℂP/second.</span>
        <br ~style.display=Stats.showAnyRuns(5) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(5, 'complexity') ? '' : 'none'~>The complexity five complexities ago took ~t player.stats.lastTenComplexities[4][0] ~ and gave ~i player.stats.lastTenComplexities[4][1] ~ ℂP, giving ~f player.stats.lastTenComplexities[4][2] ~ ℂP/second.</span>
        <br ~style.display=Stats.showAnyRuns(6) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(6, 'complexity') ? '' : 'none'~>The complexity six complexities ago took ~t player.stats.lastTenComplexities[5][0] ~ and gave ~i player.stats.lastTenComplexities[5][1] ~ ℂP, giving ~f player.stats.lastTenComplexities[5][2] ~ ℂP/second.</span>
        <br ~style.display=Stats.showAnyRuns(7) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(7, 'complexity') ? '' : 'none'~>The complexity seven complexities ago took ~t player.stats.lastTenComplexities[6][0] ~ and gave ~i player.stats.lastTenComplexities[6][1] ~ ℂP, giving ~f player.stats.lastTenComplexities[6][2] ~ ℂP/second.</span>
        <br ~style.display=Stats.showAnyRuns(8) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(8, 'complexity')  ? '' : 'none'~>The complexity eight complexities ago took ~t player.stats.lastTenComplexities[7][0] ~ and gave ~i player.stats.lastTenComplexities[7][1] ~ ℂP, giving ~f player.stats.lastTenComplexities[7][2] ~ ℂP/second.</span>
        <br ~style.display=Stats.showAnyRuns(9) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(9, 'complexity')  ? '' : 'none'~>The complexity nine complexities ago took ~t player.stats.lastTenComplexities[8][0] ~ and gave ~i player.stats.lastTenComplexities[8][1] ~ ℂP, giving ~f player.stats.lastTenComplexities[8][2] ~ ℂP/second.</span>
        <br ~style.display=Stats.showAnyRuns(10) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(10, 'complexity')  ? '' : 'none'~>The complexity ten complexities ago took ~t player.stats.lastTenComplexities[9][0] ~ and gave ~i player.stats.lastTenComplexities[9][1] ~ ℂP, giving ~f player.stats.lastTenComplexities[9][2] ~ ℂP/second.</span>
        <br/>
      </div>
      <div ~style.display=Stats.showRun(1, 'finality') ? '' : 'none'~>
        <span>Last finality took ~t player.stats.lastTenFinalities[0][0] ~ and gave ~i player.stats.lastTenFinalities[0][1] ~ FP and ~i player.stats.lastTenFinalities[0][2] ~ FS.</span>
        <br ~style.display=Stats.showAnyRuns(2) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(2, 'finality') ? '' : 'none'~>The finality two finalities ago took ~t player.stats.lastTenFinalities[1][0] ~ and gave ~i player.stats.lastTenFinalities[1][1] ~ FP and ~i player.stats.lastTenFinalities[1][2] ~ FS.</span>
        <br ~style.display=Stats.showAnyRuns(3) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(3, 'finality') ? '' : 'none'~>The finality three finalities ago took ~t player.stats.lastTenFinalities[2][0] ~ and gave ~i player.stats.lastTenFinalities[2][1] ~ FP and ~i player.stats.lastTenFinalities[2][2] ~ FS.</span>
        <br ~style.display=Stats.showAnyRuns(4) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(4, 'finality') ? '' : 'none'~>The finality four finalities ago took ~t player.stats.lastTenFinalities[3][0] ~ and gave ~i player.stats.lastTenFinalities[3][1] ~ FP and ~i player.stats.lastTenFinalities[3][2] ~ FS.</span>
        <br ~style.display=Stats.showAnyRuns(5) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(5, 'finality') ? '' : 'none'~>The finality five finalities ago took ~t player.stats.lastTenFinalities[4][0] ~ and gave ~i player.stats.lastTenFinalities[4][1] ~ FP and ~i player.stats.lastTenFinalities[4][2] ~ FS.</span>
        <br ~style.display=Stats.showAnyRuns(6) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(6, 'finality') ? '' : 'none'~>The finality six finalities ago took ~t player.stats.lastTenFinalities[5][0] ~ and gave ~i player.stats.lastTenFinalities[5][1] ~ FP and ~i player.stats.lastTenFinalities[5][2] ~ FS.</span>
        <br ~style.display=Stats.showAnyRuns(7) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(7, 'finality') ? '' : 'none'~>The finality seven finalities ago took ~t player.stats.lastTenFinalities[6][0] ~ and gave ~i player.stats.lastTenFinalities[6][1] ~ FP and ~i player.stats.lastTenFinalities[6][2] ~ FS.</span>
        <br ~style.display=Stats.showAnyRuns(8) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(8, 'finality') ? '' : 'none'~>The finality eight finalities ago took ~t player.stats.lastTenFinalities[7][0] ~ and gave ~i player.stats.lastTenFinalities[7][1] ~ FP and ~i player.stats.lastTenFinalities[7][2] ~ FS.</span>
        <br ~style.display=Stats.showAnyRuns(9) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(9, 'finality') ? '' : 'none'~>The finality nine finalities ago took ~t player.stats.lastTenFinalities[8][0] ~ and gave ~i player.stats.lastTenFinalities[8][1] ~ FP and ~i player.stats.lastTenFinalities[8][2] ~ FS.</span>
        <br ~style.display=Stats.showAnyRuns(10) ? '' : 'none'~/>
        <span ~style.display=Stats.showRun(10, 'finality') ? '' : 'none'~>The finality ten finalities ago took ~t player.stats.lastTenFinalities[9][0] ~ and gave ~i player.stats.lastTenFinalities[9][1] ~ FP and ~i player.stats.lastTenFinalities[9][2] ~ FS.</span>
        <br/>
      </div>
      <br/>
      <br/>
      <span>
        Run types to show:
        <span ~style.display=PrestigeLayerProgress.hasReached('infinity') ? '' : 'none'~>Infinity: <input type="checkbox" ~!checked=Stats.showRunType('infinity')~ ~!onchange=function() {Stats.setShowRunType('infinity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>Eternity: <input type="checkbox" ~!checked=Stats.showRunType('eternity')~ ~!onchange=function() {Stats.setShowRunType('eternity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>Complexity: <input type="checkbox" ~!checked=Stats.showRunType('complexity')~ ~!onchange=function() {Stats.setShowRunType('complexity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>Finality: <input type="checkbox" ~!checked=Stats.showRunType('finality')~ ~!onchange=function() {Stats.setShowRunType('finality', this.checked)}~></input></span>
      </span>
      <br/>
      <span>Number of last runs of each type to show: <input type="text" ~!value=Stats.lastRunsToShow()~ ~!onchange=function() {Stats.setLastRunsToShow(+this.value)}~></input></span>
    </tab>
    <tab ~style.display=Tabs.currentTab() === 'options' ? '' : 'none'~>
      <table style="margin-left: auto; margin-right: auto; border-spacing: 24px 8px; border-collapse: separate;">
        <tr>
          <td><button class="options-button" onclick="Saving.saveGame(false)">Save</button></td>
          <td><button class="options-button export-button" onclick="Saving.exportGame(1)">Export</button></td>
          <td><button class="options-button" onclick="Saving.loadGamePrompt()">Load</button></td>
        </tr>
        <tr>
          <td><div class="options-div">
            <button class="mini-options-button" onclick="Options.nextBackground()">Background: ~r player.options.theme.background ~</button>
            <button class="mini-options-button" onclick="Options.nextButtonColor()">Button colors: ~r player.options.theme.buttonColor ~</button>
            <button class="mini-options-button" onclick="Options.nextCompletionGradients()">Completion gradients: ~r player.options.theme.completionGradients ~</button>
          </div></td>
          <td><button class="options-button" onclick="Options.toggleOfflineProgress()">Offline progress: ~r player.options.offlineProgress ? "On" : "Off" ~</button></td>
          <td><div class="options-div"><span style="font-size: 0.75rem;">Offline game ticks (between ~i 1 ~ and ~i Options.maxTicks() ~, slow above ~i 1024 ~):</span><br/><input type="text" ~!value=Options.displayOfflineTicks()~ ~!onchange=function() {Options.setOfflineTicks(+this.value)}~></input></div></td>
        </tr>
        <tr>
          <td><div class="options-div">
            <button class="mini-options-button" onclick="Options.nextCompletionColors()">Completion colors: ~r player.options.completionColors ~</button>
            <button class="mini-options-button" onclick="Options.toggleResetColors()">Reset colors: ~r Options.resetColors() ? 'On' : 'Off' ~</button>
            <button class="mini-options-button" onclick="Options.toggleTabColors()">Tab colors: ~r Options.tabColors() ? 'On' : 'Off' ~</button>
          </div></td>
          <td><div class="options-div">Notation: <select ~!value=Options.notation()~ ~!onchange=function() {Options.setNotation(this.value)}~>
            <option value="Scientific">Scientific</option>
            <option value="Engineering">Engineering</option>
            <option value="Letters">Letters</option>
            <option value="Standard">Standard</option>
            <option value="Cancer">Cancer</option>
            <option value="Mixed scientific">Mixed scientific</option>
            <option value="Mixed engineering">Mixed engineering</option>
            <option value="Logarithm">Logarithm</option>
            <option value="Binary">Binary</option>
            <option value="Hexadecimal">Hexadecimal</option>
            <option value="Evil">Evil</option>
            <option value="Brackets">Brackets</option>
            <option value="Infinity">Infinity</option>
            <option value="Roman">Roman</option>
            <option value="Dots">Dots</option>
            <option value="Zalgo">Zalgo</option>
            <option value="Hex">Hex</option>
            <option value="Imperial">Imperial</option>
            <option value="Clock">Clock</option>
            <option value="Prime">Prime</option>
            <option value="Bar">Bar</option>
            <option value="Shi">Shi</option>
            <option value="Blind">Blind</option>
          </select></div></td>
          <td><button class="options-button" onclick="Options.nextTimeDisplay()" style="font-size: 0.875rem;">Time display: ~r player.options.timeDisplay ~<br/>(for example, ~t 83.125 ~)</button></td>
        </tr>
          <td><button class="options-button" onclick="Options.toggleHotkeys()">Hotkeys: ~r player.options.hotkeys ? "On" : "Off" ~</button></td>
          <td><button class="options-button" onclick="Options.toggleFitToWidth()">Decrease page size if page is too narrow: ~r player.options.fitToWidth ? "On" : "Off" ~</button></td>
          <td><button class="options-button" onclick="Options.toggleLargerCheckboxes()">Larger checkboxes: ~r player.options.largerCheckboxes ? "On" : "Off" ~</button></td>
        </tr>
        <tr>
          <td><button class="options-button" onclick="Options.toggleExportDisplay()">Show export text (as opposed to just copying it): ~r player.options.exportDisplay ? "On" : "Off" ~</button></td>
          <td><button class="options-button" onclick="Saving.resetGameWithConfirmation()">RESET THE GAME</button></td>
          <td></td>
        </tr>
      </table>
      <div>
        Confirmations:
        <span>Sacrifice: <input type="checkbox" ~!checked=Options.confirmation('sacrifice')~ ~!onchange=function() {Options.setConfirmation('sacrifice', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=SpecialDivs.isDivVisible('prestige') ? '' : 'none'~>Prestige: <input type="checkbox" ~!checked=Options.confirmation('prestige')~ ~!onchange=function() {Options.setConfirmation('prestige', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=(PrestigeLayerProgress.hasReached('infinity') || InfinityPrestigeLayer.canInfinity()) ? '' : 'none'~>Infinity: <input type="checkbox" ~!checked=Options.confirmation('infinity')~ ~!onchange=function() {Options.setConfirmation('infinity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=(PrestigeLayerProgress.hasReached('eternity') || EternityPrestigeLayer.canEternity()) ? '' : 'none'~>Eternity: <input type="checkbox" ~!checked=Options.confirmation('eternity')~ ~!onchange=function() {Options.setConfirmation('eternity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=(PrestigeLayerProgress.hasReached('complexity') || ComplexityPrestigeLayer.canComplexity()) ? '' : 'none'~>Complexity: <input type="checkbox" ~!checked=Options.confirmation('complexity')~ ~!onchange=function() {Options.setConfirmation('complexity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=PrestigeLayerProgress.hasReached('complexity') ? '' : 'none'~>Complexity reset: <input type="checkbox" ~!checked=Options.confirmation('complexityReset')~ ~!onchange=function() {Options.setConfirmation('complexityReset', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=(PrestigeLayerProgress.hasReached('finality') || FinalityPrestigeLayer.canFinality()) ? '' : 'none'~>Finality: <input type="checkbox" ~!checked=Options.confirmation('finality')~ ~!onchange=function() {Options.setConfirmation('finality', this.checked)}~></input></span>
      </div>
      <div ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>
        <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>Single study refund: <input type="checkbox" ~!checked=Options.confirmation('singleStudyRefund')~ ~!onchange=function() {Options.setConfirmation('singleStudyRefund', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=PrestigeLayerProgress.hasReached('eternity') ? '' : 'none'~>Studies respec: <input type="checkbox" ~!checked=Options.confirmation('studiesRespec')~ ~!onchange=function() {Options.setConfirmation('studiesRespec', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=EternityChallenge.areEternityChallengesVisible() ? '' : 'none'~>Eternity challenge respec: <input type="checkbox" ~!checked=Options.confirmation('eternityChallengeRespec')~ ~!onchange=function() {Options.setConfirmation('eternityChallengeRespec', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=(Powers.isUnlocked() || PrestigeLayerProgress.hasReached('finality')) ? '' : 'none'~>Powers respec: <input type="checkbox" ~!checked=Options.confirmation('powersRespec')~ ~!onchange=function() {Options.setConfirmation('powersRespec', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        <span ~style.display=PrestigeLayerProgress.hasReached('finality') ? '' : 'none'~>Finality shard upgrades respec: <input type="checkbox" ~!checked=Options.confirmation('finalityShardUpgradesRespec')~ ~!onchange=function() {Options.setConfirmation('finalityShardUpgradesRespec', this.checked)}~></input></span>
      </div>
      <br/>
      <span>Tabs to show:</span>
      <div>
        <span>
          <span ~style.display=Tabs.isTabOptionVisible('main') ? '' : 'none'~>Main: <input class="main-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('main')~ ~!onchange=function() {Tabs.setTabOption('main', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('infinity') ? '' : 'none'~>Infinity: <input class="infinity-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('infinity')~ ~!onchange=function() {Tabs.setTabOption('infinity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('challenges') ? '' : 'none'~>Challenges: <input class="challenges-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('challenges')~ ~!onchange=function() {Tabs.setTabOption('challenges', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('autobuyers') ? '' : 'none'~>Autobuyers: <input class="autobuyers-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('autobuyers')~ ~!onchange=function() {Tabs.setTabOption('autobuyers', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('infinity-challenges') ? '' : 'none'~>Infinity Challenges: <input class="infinity-challenges-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('infinity-challenges')~ ~!onchange=function() {Tabs.setTabOption('infinity-challenges', this.checked)}~></input></span>
        </span>
      </div>
      <div>
        <span>
          <span ~style.display=Tabs.isTabOptionVisible('goals') ? '' : 'none'~>Goals: <input class="goals-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('goals')~ ~!onchange=function() {Tabs.setTabOption('goals', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('statistics') ? '' : 'none'~>Statistics: <input class="statistics-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('statistics')~ ~!onchange=function() {Tabs.setTabOption('statistics', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('last-ten-runs') ? '' : 'none'~>Last Ten Runs: <input class="last-ten-runs-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('last-ten-runs')~ ~!onchange=function() {Tabs.setTabOption('last-ten-runs', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('options') ? '' : 'none'~>Options: cannot be hidden</span> 
        </span>
      </div>
      <div ~style.display=Tabs.isTabOptionVisible('eternity') ? '' : 'none'~>
        <span>
          <span ~style.display=Tabs.isTabOptionVisible('eternity') ? '' : 'none'~>Eternity: <input class="eternity-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('eternity')~ ~!onchange=function() {Tabs.setTabOption('eternity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('eternity-milestones') ? '' : 'none'~>Eternity Milestones: <input class="eternity-milestones-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('eternity-milestones')~ ~!onchange=function() {Tabs.setTabOption('eternity-milestones', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('studies') ? '' : 'none'~>Studies: <input class="studies-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('studies')~ ~!onchange=function() {Tabs.setTabOption('studies', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('eternity-producer') ? '' : 'none'~>Eternity Producer: <input class="eternity-producer-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('eternity-producer')~ ~!onchange=function() {Tabs.setTabOption('eternity-producer', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('eternity-challenges') ? '' : 'none'~>Eternity Challenges: <input class="eternity-challenges-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('eternity-challenges')~ ~!onchange=function() {Tabs.setTabOption('eternity-challenges', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('chroma') ? '' : 'none'~>Chroma: <input class="chroma-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('chroma')~ ~!onchange=function() {Tabs.setTabOption('chroma', this.checked)}~></input></span>
        </span>
      </div>
      <div ~style.display=Tabs.isTabOptionVisible('complexity') ? '' : 'none'~>
        <span>
          <span ~style.display=Tabs.isTabOptionVisible('complexity') ? '' : 'none'~>Complexity: <input class="complexity-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('complexity')~ ~!onchange=function() {Tabs.setTabOption('complexity', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('complexity-challenges') ? '' : 'none'~>Complexity Challenges: <input class="complexity-challenges-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('complexity-challenges')~ ~!onchange=function() {Tabs.setTabOption('complexity-challenges', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('complexity-achievements') ? '' : 'none'~>Complexity Achievements: <input class="complexity-achievements-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('complexity-achievements')~ ~!onchange=function() {Tabs.setTabOption('complexity-achievements', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('powers') ? '' : 'none'~>Powers: <input class="powers-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('powers')~ ~!onchange=function() {Tabs.setTabOption('powers', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('oracle') ? '' : 'none'~>Oracle: <input class="oracle-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('oracle')~ ~!onchange=function() {Tabs.setTabOption('oracle', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('galaxies') ? '' : 'none'~>Galaxies: <input class="galaxies-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('galaxies')~ ~!onchange=function() {Tabs.setTabOption('galaxies', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
        </span>
      </div>
      <div ~style.display=Tabs.isTabOptionVisible('finality') ? '' : 'none'~>
        <span>
          <span ~style.display=Tabs.isTabOptionVisible('finality') ? '' : 'none'~>Finality: <input class="finality-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('finality')~ ~!onchange=function() {Tabs.setTabOption('finality', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('finality-shards') ? '' : 'none'~>Finality Shards: <input class="finality-shards-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('finality-shards')~ ~!onchange=function() {Tabs.setTabOption('finality-shards', this.checked)}~></input><span style="display: inline-block; width: 16px;"></span></span>
          <span ~style.display=Tabs.isTabOptionVisible('finality-milestones') ? '' : 'none'~>Finality Milestones: <input class="finality-milestones-tab-option" type="checkbox" ~!checked=Tabs.isTabOptionOn('finality-milestones')~ ~!onchange=function() {Tabs.setTabOption('finality-milestones', this.checked)}~></input></span>
        </span>
      </div>
      <span><button onclick="Tabs.showAllUnlockedTabs()">Show all unlocked tabs</button></span>
      <br/>
      <br/>
      <span><a target="_blank" rel="noopener noreferrer" href="guide/index.html">Guide (incomplete)</a><span style="display: inline-block; width: 256px;"></span><a target="_blank" rel="noopener noreferrer" href="https://discord.gg/7JfmqF2">Discord</a></span>
      <br/>
      <br/>
      <span>This game uses <a target="_blank" rel="noopener noreferrer" href="https://github.com/Patashu/break_infinity.js">break_infinity</a>, under an MIT license, and <a target="_blank" rel="noopener noreferrer" href="https://github.com/antimatter-dimensions/notations">Antimatter Dimensions Notations</a>, also under an MIT license.</span>
      <br/>
      <span>Thanks to the testers (Boo, Earth, Omsi, Sere, SpectralFlame, others, and Jazz) for helping to test the game before its release.</span>
      <br/>
      <span>Also, thanks to jdawson7 for making the game's strategy much clearer and thus greatly improving the guide.</span>
      <br/>
      <br/>
      <span style="display: none;">Exported save (also copied to clipboard): <input id="export-output"></input></span>
    </tab>
  </div>
</body>
</html>
